检查窗口是否已经打开 window.open

新手上路,请多包涵

我有一个 html 页面。在页面正文中,我正在调用 onload 调用 javascript 函数以打开弹出窗口的事件。这是代码:

 var newWindow = null;
function launchApplication()
{
    if ((newWindow == null) || (newWindow.closed))
    {
        newWindow = window.open('abc.html','','height=960px,width=940px');
    }
}

当我移动到另一个页面并再次返回该页面时,弹出窗口会重新打开,尽管它已经打开了。请指导我正确的方向,以便如果弹出窗口已经打开,则不应再次打开。我尝试了 document.referred 但它需要在线站点,目前我正在离线工作。

原文由 Saghir A. Khatri 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答
newWindow = window.open('abc.html','com_MyDomain_myWindowForThisPurpose','height=960px,width=940px');

给窗口一个名字。像这样将名称基于您的域,可以防止您选择其他人碰巧选择的名称的机会。

永远不要组成以 _ 开头的名称,这些名称保留给浏览器以不同方式对待的特殊名称(与锚元素的“目标”属性相同)。

请注意,如果使用不同的选项(例如不同的高度)打开该名称的窗口,那么它将保留这些选项。此处的选项只有在没有该名称的窗口时才会生效,因此您需要创建一个新窗口。

编辑:

请注意,“名称”是窗口的名称,而不是内容的名称。它不会影响标题( newWindow.document.title 会影响它,当然会在 abc.html 中编码)。它确实会影响其他跨窗口做事的尝试。因此,另一个同名的 window.open 将重用该窗口。还有像 <a href="def.html" target="com_MyDomain_myWindowForThisPurpose">clicky!</a> 这样的链接将重新使用它。关于浏览器在各种情况下阻止窗口打开(弹出窗口阻止)的正常警告适用。

原文由 Jon Hanna 发布,翻译遵循 CC BY-SA 3.0 许可协议

打开一个窗口并在页面刷新之间保持对它的引用。

 var winref = window.open('', 'MyWindowName', '');
if(winref.location.href === 'about:blank'){
    winref.location.href = 'http://example.com';
}

或函数格式

function openOnce(url, target){
    // open a blank "target" window
    // or get the reference to the existing "target" window
    var winref = window.open('', target, '');

    // if the "target" window was just opened, change its url
    if(winref.location.href === 'about:blank'){
        winref.location.href = url;
    }
    return winref;
}
openOnce('http://example.com', 'MyWindowName');

原文由 Timo Huovinen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题