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 после загрузки окна с помощью таймера или цикла: