首页  >  问答  >  正文

javascript - 怎么切换到之前用window.open打开的window但不刷新该window?

项目中遇到这样一个问题。
parent window中用window.open(location.href, projectId)新开了一个以projectId作为window.name的窗口。
然后在parent window中想直接根据projectId切换到已打开的相应的window,但不刷新该window。

直接用window.open(location.href, projectId)会切换到相应的window,但会刷新页面,有什么办法只切换不刷新?

phpcn_u1582phpcn_u15822730 天前848

全部回复(3)我来回复

  • 淡淡烟草味

    淡淡烟草味2017-05-19 10:36:22

    用变量保存window.open的返回值,其返回值就是那个窗口的 window 对象,执行 focus 方法即可。

    win1 = window.open(url1);
    win2 = window.open(url2);
    
    // 后续用 win1 这个引用执行 focus 方法
    if (!win1.closed) {
      win1.focus();
    }

    回复
    0
  • 为情所困

    为情所困2017-05-19 10:36:22

    使用html5history相关API

    history.pushState()

    history. popstate事件等等

    相关内容详细请参考操纵浏览器的历史记录MDN

    回复
    0
  • 某草草

    某草草2017-05-19 10:36:22

    假设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对象的方法就方便多了。

    回复
    0
  • 取消回复