代码之家  ›  专栏  ›  技术社区  ›  spender

查找以前由窗口打开的窗口。打开

  •  18
  • spender  · 技术社区  · 16 年前

    我们有以下情况,从一个域运行:

    页A用途 window.open() 打开一个命名的窗口(弹出式播放器)。 窗口。打开() 为页提供对窗口的引用。

    用户现在重新加载页A。对命名窗口的引用将丢失。使用 窗口。打开() 要“找到”窗口有一个不幸的副作用,就是重新加载它(不需要)。有没有其他方法可以参考这个窗口?

    4 回复  |  直到 11 年前
        1
  •  23
  •   awe    11 年前

    试试这个:

    var playerUrl = 'http://my.player...';
    var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ;
    if(popupPlayer.location.href == 'about:blank' ){
        popupPlayer.location = playerUrl ;
    }
    popupPlayer.focus();
    

    它将打开一个具有唯一名称的空白窗口。由于url为空,因此不会重新加载窗口内容。

        2
  •  1
  •   Alexander Malfait    16 年前

    阿飞,不,没有。

    一种肮脏但我猜是可行的方法是使用window.opener从弹出窗口中定期重置父窗口上的引用,如下代码:

        setInterval(function() {
            if(window.opener) {
                window.opener.document.myPopupWindow = window
            }
        }, 100)
    
    

    在父窗口中,您将能够访问document.myPopupWindows,即使在重新加载之后(嗯,重新加载后100毫秒)。这应该可以跨浏览器工作。

        3
  •  0
  •   OverLex    16 年前

    实际上,您所做的是销毁创建的窗口(弹出窗口)的父窗口(A页),因此它不再引用原始父窗口,因此您无法获得直接引用。

    我能想到的唯一解决方案是使用一个浏览器,它为您提供了添加javascript功能的循环浏览活动窗口(选项卡),并找到一个具有特殊属性(即:重新加载的页面a)的窗口,该属性可由弹出窗口识别。

    不幸的是,我想只有firefox有一些额外的功能或扩展,给你这种灵活性。(不过,这也是一种安全风险)

        4
  •  0
  •   Johan    15 年前

    这应该管用。在弹出窗口中添加此代码:

    function updateOpener() {
        if (window.opener)
            window.opener.document.myPopupWindow = window;
        else
            setTimeout(updateOpener, 100);
    }
    
    updateOpener(); 
    

    在父窗口的onload中。要确保MyPopupWindows已设置,请等待100毫秒后再访问它。

    setTimeout(function() {
        if (document.myPopupWindow) 
            document.myPopupWindow.focus();
    }, 100);