0

下面是我用来在新窗口中打开链接的一段代码,比如“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 中都会发生

4

1 回答 1

0

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

你不需要你的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上面的代码替换了它。

于 2015-11-23T08:37:02.867 回答