Ich bin im Projekt auf ein solches Problem gestoßen.
Verwenden Sie window.open(location.href, projectId) im übergeordneten Fenster, um ein neues Fenster mit projectId als window.name zu öffnen.
Dann möchte ich im übergeordneten Fenster basierend auf der Projekt-ID direkt zum entsprechenden geöffneten Fenster wechseln, jedoch ohne das Fenster zu aktualisieren.
Wenn Sie window.open(location.href, projectId) direkt verwenden, wird zum entsprechenden Fenster gewechselt, die Seite wird jedoch aktualisiert. Gibt es eine Möglichkeit, nur zu wechseln, ohne sie zu aktualisieren?
用变量保存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对象的方法就方便多了。