【问题标题】:Pop Up Blocker in Chrome and IEChrome 和 IE 中的弹出窗口拦截器
【发布时间】:2015-11-23 08:26:21
【问题描述】:

下面是我用来在新窗口中打开链接的一段代码,比如“abc”。

如果用户再次点击同一个链接,它应该在同一个窗口“abc”中关闭并重新打开该链接。

window.openOrFocus = function(url, "abc") {
if (!window.popups) {
    window.popups = {};}
if (window.popups["abc"]){
   var v=window.open("", "abc");
    v.close();}
window.popups["abc"] = window.open(url, "abc");
}

但是现在,假设我单击链接,它会在名为“abc”的新窗口中打开 URL。 现在我去关闭窗口“abc”。然后返回并再次点击链接。

那个时候它会显示弹出窗口拦截器。

当我手动关闭窗口并尝试通过单击链接重新打开时,我很困惑为什么会出现这个弹出窗口阻止程序。

在 IE 和 Chrome 中都会发生

【问题讨论】:

  • 当然,您可以在自己的代码中使用您喜欢的任何支撑和缩进样式,但是在寻求帮助时,请使用模糊标准的东西。在块的最后一行的末尾隐藏结束 } 非常容易出错并且难以阅读,这使得人们很难帮助你。 (我强烈建议即使在不寻求帮助的情况下也可以切换到正常风格。)

标签: javascript google-chrome internet-explorer window.open popup-blocker


【解决方案1】:

可能是因为您使用空白 URL 或在这种情况下重复调用 window.open

您不需要您的window.open("", "abc") 电话;相反,只需使用您已有的窗口引用:

window.openOrFocus = function(url, windowName) {
    if (!window.popups) {
        window.popups = {};
    }
    if (window.popups[windowName]){
       window.popups[windowName].close();
    }
    window.popups[windowName] = window.open(url, windowName);
};

我还会监听unload 事件,以便您删除您的引用:

window.openOrFocus = function(url, windowName) {
    if (!window.popups) {
        window.popups = {};
    }
    if (window.popups[windowName]){
       window.popups[windowName].close();
    }
    window.popups[windowName] = window.open(url, windowName);
    window.popups[windowName].onunload = function() {
        delete window.popups[windowName];
    };
};

旁注:这是一个语法错误:

window.openOrFocus = function(url, "abc") {
// --------------------------------^

我已在上面的代码中将其替换为 windowName

【讨论】:

  • 你说得对,我不需要使用 'window.open("","windowabc")。我之前尝试过使用 window.popup[name].close。使用它可以帮助我避免弹出问题,但它在 IE 上不一致。有时,它会关闭窗口,有时它只是忽略...
  • @VipulKumar:这可能是因为你没有跟踪unloads。
  • 我也尝试添加卸载事件..但在 IE 中,window.popups[windowname].close 不会关闭相关窗口。但这是奇怪的部分......我第二次单击链接时,相同的代码会关闭链接并在 IE 中重新打开。第三次点击,它没有关闭链接..第四次点击..它关闭!我不知道为什么会这样……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2022-11-01
相关资源
最近更新 更多