專案中遇到這樣一個問題。 parent window中用window.open(location.href, projectId)新開了一個以projectId作為window.name的視窗。 然後在parent window中想直接根據projectId切換到已開啟的對應的window,但不刷新該window。
直接用window.open(location.href, projectId)會切換到對應的window,但會刷新頁面,有什麼辦法只切換不刷新?
用變數保存window.open的回傳值,其回傳值就是那個視窗的 window 对象,执行 focus 方法即可。
window
focus
win1 = window.open(url1); win2 = window.open(url2); // 后续用 win1 这个引用执行 focus 方法 if (!win1.closed) { win1.focus(); }
使用html5的history相关API
html5
history
API
history.pushState()
history. popstate事件等等
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物件的方法就方便多了。
用變數保存window.open的回傳值,其回傳值就是那個視窗的
window
对象,执行focus
方法即可。使用
html5
的history
相关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物件的方法就方便多了。