2009-05-20 3 views
11

Может кто-нибудь помочь, у меня есть всплывающее окно, которое блокируется. Это всплывающее окно, созданное, потому что кто-то нажал на изображение «Печать» на моем сайте.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); 

ответ

13

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

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

+0

Да, спасибо, что это было, в основном мне нужно загрузить файл из моей текущей сети, а d не BLANK ... поэтому я создал пустой файл html .. загрузил его и использовал windows.write написать мой html .. спасибо вы и спасибо за всех elses комментариев –

3

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

Просто сделайте это после кода, который вы указали.

if (!child1) { 
     alert('You have a popup blocker enabled. Please allow popups for www.yourSite.com'); 
} 
+2

Это не работает в IE 8 – JBeckton

0

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

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

С уважением.

PD: Я полагаю, что добавление вашего сайта в «доверенные сайты» не является вариантом, не так ли?

4

Блокировщик всплывающих окон 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(). Не видя вашей точной реализации, я не могу сказать, есть ли у вас проблема или нет.

+0

приятный код его работы! Thanx –

1

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

var newWin = window.open(...); 
if (newWin && newWin.top) { 
    // popup has opened 
} else { 
    // popup has been blocked 
} 
0

у меня есть идея, т.е. 10/11:

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

в победу, вы можете получить customParam после окна OnLoad с таймером или петлей:

Смежные вопросы