2009-05-13 3 views
1

Я разработал функцию, которая при вызове должна открывать окно, но оно возвращает null. Если я открываю окно в исходной функции JavaScript, оно работает. Я полагаю, что его исходная функция передает управление другой функции, но по какой-то причине это не работает.javascript open.window возвращает null в вызываемой функции

Вот моя оригинальная функция, это в основном вызывает новый файл JavaScript и загружает файл HTML, а когда «Готов», ему нужно отобразить window.open с HTML-файлом, который теперь находится в форме строки.

order.prototype.printMe = function() { 
    order_resume.loadthis("myTestPage.html", "showData"); 

    // OPENING WINDOW HERE WORKS; but the the html file that is loaded 
    // in above line hasn't finsihed loading - so i need to show it form 
    // the function below once in "ready" state 

/*  child1 = window.open ("about:blank","_blank"); 
     child1.document.write(myDocument); 
     child1.document.close(); 
*/  
} 

А вот моя функция, которая вызывается из исходной функции:

function showResume() { 
    this.req = false; 

    reservaResumen.prototype.showData = function() { 
     if (this.req.readyState == 4) { 
      child1 = window.open("about:blank", "_blank"); /// THIS RETURNS NULL 
      child1.document.write("test"); 
      child1.document.close(); 
     } 
    } 

    reservaResumen.prototype.loadthis = function(url, myMethod) { 
     if (window.XMLHttpRequest && !(window.ActiveXObject)) { 
      try { 
       this.req = new XMLHttpRequest(); 
      } 
      catch (e) { 
       this.req = false; 
      } 
     } 
     else if (window.ActiveXObject) { 
      try { 
       this.req = new ActiveXObject("Msxml2.XMLHTTP"); 
      } 
      catch (e) { 
       try { 
        this.req = new ActiveXObject("Microsoft.XMLHTTP"); 
       } 
       catch (e) { 
        this.req = false; 
       } 
      } 
     } 
     if (this.req) { 
      var loader = this; 
      this.req.onreadystatechange = function() { 
       eval("loader." + myMethod + ".call(loader)") 
      } 
      this.req.open("GET", url, true); 
      this.req.send(""); 
     } 
    }​ 
+3

Включен ли блокиратор всплывающих окон? – epascarello

+0

нет - потому что он открывает его в исходной функции. –

+1

, пожалуйста, дважды проверьте настройки блокировки всплывающих окон. Браузеры не будут открывать окна без взаимодействия с пользователем. Кроме того, когда пользователь делает, например. действие click, но вы ждете до конца (например, выполняя некоторые асинхронные операции, такие как Ajax-запросы), браузеры также блокируют окна и возвращают null для window.open. – Rafael

ответ

0

См this discussion thread, что атрибуты этой проблемы в 32 битном IE8 браузер работает на 64-битных ОС Windows 7.

Я просто столкнулись с этим несколько дней назад. Моя машина разработки начала вести себя по-разному, всплывающие окна больше не работают на многих сайтах, в том числе и в том, что я разрабатываю, и никаких исправлений не видно. Я должен запустить IE как администратор, тогда он работает. Отключение защищенного режима не разрешает это. Этот 64-битный браузер не имеет этой проблемы.

Почему в моем случае это только началось несколько недель назад, я не могу сказать. Было обновление безопасности 9/16, которое, как я подозреваю, вызвало изменение в поведении. Это очень странно.

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