javascript - 怎麼切換到之前用window.open開啟的window但不刷新該window?
phpcn_u1582
phpcn_u1582 2017-05-19 10:34:22
0
3
896

專案中遇到這樣一個問題。
parent window中用window.open(location.href, projectId)新開了一個以projectId作為window.name的視窗。
然後在parent window中想直接根據projectId切換到已開啟的對應的window,但不刷新該window。

直接用window.open(location.href, projectId)會切換到對應的window,但會刷新頁面,有什麼辦法只切換不刷新?

phpcn_u1582
phpcn_u1582

全部回覆(3)
淡淡烟草味

用變數保存window.open的回傳值,其回傳值就是那個視窗的 window 对象,执行 focus 方法即可。

win1 = window.open(url1);
win2 = window.open(url2);

// 后续用 win1 这个引用执行 focus 方法
if (!win1.closed) {
  win1.focus();
}
为情所困

使用html5history相关API

history.pushState()

history. popstate事件等等

相關內容詳細請參考操縱瀏覽器的歷史記錄MDN

某草草

假設A window開啟了B window,B window開啟了C window,A擁有對B的引用, B擁有對C的引用。
這時候在A window跳轉B,或是B window跳轉C都可以用window.focus()直接實作。
但A window中想要跳轉C,查了各種API暫時沒發現怎麼透過window.name直接取得對應window物件的。試了下localstorage也沒辦法存window物件。這種情況有點麻煩。
想了下如果一定要實現,辦法應該是有的。大致上是利用localStorage來保存整棵樹結構,根節點是第一次打開的A,A的子節點是B,B的子節點是C。這樣所有視窗都能有辦法最終找到擁有最後要跳轉window的擁有者,然後透過postMessage一層層通知到那個window的擁有者,讓他去觸發目標window.focus()方法
但這樣子,項目多切換次數樹結構就會變得有點複雜,一層層通訊開銷估計也不小。如果瀏覽器有根據window.name取得window物件的方法就方便多了。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板