Javascript window.open заблокирован IE блокировщик всплывающих окон - PullRequest
12 голосов
/ 20 мая 2009

Может кто-нибудь помочь, у меня есть всплывающее окно, которое блокируется. Это всплывающее окно, созданное потому, что кто-то щелкнул изображение «Печать» на моем сайте.

Я думал, что 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);

Ответы [ 6 ]

13 голосов
/ 20 мая 2009

Проблема будет в том, что open вернет ссылку на окно, только если вы переходите куда-то в пределах вашего текущего хоста. Вы переходите на страницу about: blank, которая находится за пределами вашего хоста.

Попробуйте добавить на сайт пустой файл .htm и откройте его. Я все еще не уверен, что document.write будет разрешен, документ не будет открыт для записи, хотя вы можете манипулировать DOM существующего пустого документа.

4 голосов
/ 20 мая 2009

Блокировщик всплывающих окон Internet Explorer, если установлен уровень фильтра Medium, не будет блокировать окна, открытые 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 может в некоторых случаях вызывать срабатывание блокировщика всплывающих окон. Кажется, что-то связано с тем, как far window.open() от события onclick. Слишком много уровней функций, вызывающих функции, прежде чем вызывать window.open(). Не видя вашей точной реализации, я не могу сказать вам, является ли это вашей проблемой или нет.

3 голосов
/ 20 мая 2009

Это блокирует это, потому что это не якорь с целью = "_ blank". Вы создаете всплывающее окно программно.

Просто сделайте это после предоставленного вами примера кода.

if (!child1) {
      alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com');
}
1 голос
/ 22 августа 2010

пожалуйста, попробуйте код

var newWin = window.open(...);
if (newWin && newWin.top) {
    // popup has opened
} else {
    // popup has been blocked
}
0 голосов
/ 11 марта 2017

У меня есть идея, например, 10/11:

let win = window.open();
setTimeout(function(){
    win.customParam = 'xxxx';
});

в win вы можете получить customParam после загрузки окна с помощью таймера или цикла:

0 голосов
/ 20 мая 2009

Я предлагаю вам сделать фиктивную [форму] с target = "_ blank" вместо window.open ().

Надеюсь, это сработает.

Привет.

PD: Я полагаю, что добавить ваш сайт в список "доверенных сайтов" не вариант, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...