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