引入iframe頁面之後,如何更改頂層的跳轉鏈接?

最近做了個需求,要上線的時候發現了個大坑,跳都跳不出來的那種!一定要把經驗寫下來,別再掉進坑了,丟人~~~

事情是這樣的:
我們這個項目吧:主要是分爲殼子和子系統們,子系統的頁面通過iframe的形式進行展示,其他的功能都還好,就是跳轉路由時有些一言難盡,vue的router.push是無法改變跳轉鏈接
舉個🌰:
列表頁-點擊查看–查看頁
在這裏插入圖片描述
列表頁的路由:***/***/list
查看頁路由:***/***/list/view?id=1075
實際上呢,跳轉到查看頁路由並沒有改變,依舊是列表頁的路由,因爲iframe嵌入的頁面是無法改變外層的鏈接的,只要輕輕刷新一下,就會跳回列表頁了,當然這個問題PM還是可以接受的,哈哈
只是,剛剛好碰到了無法接受的問題,需要在新頁面打開查看頁面還必須展示跳轉鏈接上的參數,這怎麼辦?我當時慌的一批。。。
(1)最笨的辦法,送當時的自己一個字 愚蠢 哈哈
手動拼url: 不贅述,因爲實在是太雞肋了
沒啥優點,全是缺點:拼的url部分全是寫死的,不靈活,只要鏈接稍一改變,就會出現問題,容易跳出iframe,而且不容易維護,還好這一塊代碼都是我維護的,就算不笑話我,也得罵死我
(2)我新學到的好方法

top.location.href: 得到的是最外層頁面的鏈接
window.location.href: 得到的是當前頁面的鏈接

這一塊是跳轉到新的頁面

let baseUlr = top.location.href // 得到最頂層的url
let routeUrl = self.$router.resolve({   // 跳轉頁面的url
  name: 'view',
  query: {
    id: row.id
  },
})
routeUrl = baseUlr + routeUrl.href  // 拼接成最終要跳轉的url
window.open(routeUrl, '_blank', 'noopener,noreferrer')  // 新頁面打開

再跳回原頁面

 let baseUlr =  top.location.href.substring(0,top.location.href.indexOf('/view'))  // 截斷url
 window.open(baseUlr)  // 打開新頁面
  window.top.location.close()  // 關閉當前頁面

強調一下:必須要重新打開個頁面纔可,不然就會出現一種情況:路由變了,頁面還是原來的頁面,不管window.location.reload()還是window.top.location.reload()都不行!所以就只能打開新頁面,在關閉當前頁面啦。。
這個問題已經圓滿解決了,希望以後可以有更好的辦法來解決這個問題吧!!!
To be continued…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章