Блокировщик всплывающих окон в 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


person Vipul Kumar    schedule 23.11.2015    source источник
comment
Конечно, вы можете использовать любой стиль скобок и отступов в своем собственном коде, но если вам нужна помощь, пожалуйста, используйте что-нибудь расплывчато стандартное. Скрытие закрывающего } в конце последней строки блока чрезвычайно подвержено ошибкам и плохо читается, что затрудняет помощь людям. (Я настоятельно рекомендую переключиться на обычный стиль, даже если не прошу о помощи.)   -  person T.J. Crowder    schedule 23.11.2015


Ответы (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 в приведенном выше коде.

person T.J. Crowder    schedule 23.11.2015
comment
Да, вы правы, мне не нужно использовать 'window.open(,windowabc). Раньше я пробовал с window.popup[name].close. Использование этого помогает мне избежать проблемы с всплывающими окнами, но это несовместимо с IE. Иногда он закрывает окно, а иногда просто игнорирует... - person Vipul Kumar; 23.11.2015
comment
@VipulKumar: Вероятно, это потому, что вы не отслеживали unload. - person T.J. Crowder; 23.11.2015
comment
Я также пытался добавить событие выгрузки... но в IE window.popups[windowname].close не закрывает соответствующее окно. Но вот что странно... Второй раз, когда я нажимаю на ссылку, тот же код закрывает ссылку и снова открывает ее в IE. Третий раз нажимаю, ссылка не закрывается..Четвертый раз нажимаю..закрывается!!! Я не знаю, почему это происходит... - person Vipul Kumar; 24.11.2015