javascript - 怎么切换到之前用window.open打开的window但不刷新该window?
phpcn_u1582
phpcn_u1582 2017-05-19 10:34:22
0
3
861

项目中遇到这样一个问题。
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对象的方法就方便多了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板