javascript - Wie wechsle ich zu einem Fenster, das zuvor mit window.open geöffnet wurde, ohne das Fenster zu aktualisieren?
phpcn_u1582
phpcn_u1582 2017-05-19 10:34:22
0
3
893

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?

phpcn_u1582
phpcn_u1582

Antworte allen(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对象的方法就方便多了。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage