Javascript window.open заблокирован блокировщиком всплывающих окон IE
Может кто-нибудь помочь, у меня есть всплывающее окно, которое блокируется. Это всплывающее окно, созданное, потому что кто-то нажал на изображение "Печать" на моем сайте.
Я думал, что IE не должен блокировать их, когда всплывающее окно появилось через onclick
?
Может ли кто-нибудь помочь? Переменная child1
всегда возвращается как NULL
, если включен блокировщик всплывающих окон...
Возможно, проблема в том, что событие onclick
затем передает управление новой функции, которая загружает html файл и делает child.document.write
Вот мой простой код.
var width = 800;
var height = 600;
var left = parseInt((screen.availWidth / 2) - (width / 2));
var top = parseInt((screen.availHeight / 2) - (height / 2));
var windowFeatures = "width=" + width + ",height=" + height
+ ",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes,left="
+ left + ",top=" + top + "screenX=" + left + ",screenY=" + top;
child1 = window.open("about:blank", "subWind", windowFeatures);
Ответы
Ответ 1
Проблема заключается в том, что open будет возвращать ссылку на окно только в том случае, если вы перемещаетесь где-то внутри вашего текущего хоста. Вы переходите к: пробелу, который не входит в ваш хост.
Попробуйте добавить файл blank.htm на свой сайт и откройте его. Я все еще не уверен, что document.write будет разрешено, чтобы документ не был открыт для записи, однако вы можете управлять DOM существующего пустого документа.
Ответ 2
Блокировщик всплывающих окон Internet Explorer, если установлен на уровне фильтра Medium
, не будет блокировать открытые JavaScript JavaScript, если они были инициированы действием пользователя. В IE 6, 7 и 8 отлично работает следующее:
<script type="text/javascript">
function openWin() {
var width = 800;
var height = 600;
var left = Math.floor((screen.availWidth - width) / 2);
var top = Math.floor((screen.availHeight - height) / 2);
var windowFeatures = "width=" + width + ",height=" + height +
",menubar=yes,toolbar=yes,scrollbars=yes,resizable=yes," +
"left=" + left + ",top=" + top +
"screenX=" + left + ",screenY=" + top;
child1 = window.open("about:blank", "subWind", windowFeatures);
writeTo(child1);
}
function writeTo(w) {
w.document.write('Test');
}
</script>
<a href="#" onclick="openWin();return false;">Test</a>
Обратите внимание, что использование document.write
во вновь открывшемся окне не работает в некоторых веб-браузерах. Также обратите внимание, что это может вызвать блокировщик всплывающих окон в других браузерах, даже если он работает так, как показано в Internet Explorer.
Я видел, где вызов JavaScript из события onclick
может, в некоторых случаях, вызвать запуск блокировщика всплывающих окон. Кажется, это связано с тем, насколько далеко window.open()
от события onclick. Слишком много уровней функций, вызывающих функции перед вызовом window.open()
. Не видя вашей точной реализации, я не могу сказать вам, есть ли у вас проблема или нет.
Ответ 3
Он блокирует его, потому что это не якорь с целью = "_ blank". Вы создаете всплывающее окно программно.
Просто сделайте это после кода, который вы указали.
if (!child1) {
alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com');
}
Ответ 4
попробуйте код
var newWin = window.open(...);
if (newWin && newWin.top) {
// popup has opened
} else {
// popup has been blocked
}
Ответ 5
Я предлагаю вам создать фиктивный [form] с target = "_ blank" вместо window.open().
Я надеюсь, что это сработает.
С уважением.
PD: Я полагаю, что добавление вашего сайта в "доверенные сайты" не является вариантом, не так ли?
Ответ 6
У меня есть идея в том, что 10/11:
let win = window.open();
setTimeout(function(){
win.customParam = 'xxxx';
});
в win, вы можете получить customParam после загрузки окна с помощью таймера или цикла: