Блокировка всплывающих окон в Chrome и IE

Ниже приведен фрагмент кода, который я использую для открытия ссылки в новом окне, например, "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");
}

Но теперь, скажем, я нажимаю на ссылку, он открывает URL в новом окне с именем "abc". Теперь я иду и закрываю окно "abc". и вернитесь и снова нажмите на ссылку.

В этот раз он показывает блокировку всплывающих окон.

Я не понимаю, почему этот блокировщик всплывающих окон появляется, когда я закрываю окно вручную и пытаюсь открыть его, нажав на ссылку.

Бывает как в IE, так и в Chrome

1 ответ

Наверное потому что ты звонишь 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 в коде выше.

Другие вопросы по тегам