2013-05-10 72 views
2

我還沒有能夠解釋相關問題的答案(到我的知識水平),所以...Javascript .onload在IE中不能觸發? window.open參考問題?

我有一個簡單的腳本(使用jQuery),打開一個新窗口和將父項的某些內容添加到子項內的指定容器中。我不知道這是我的方法是錯誤的還是我錯過了一個步驟 - 運行在新窗口上的腳本運行在IE上時,它在window.onload函數之外,但是這打破了FF,並且當FF裏面的window.onload,但是然後在IE中的新窗口似乎沒有做任何事情(沒有警報,沒有添加內容,虛無)))。

請任何人都可以向我解釋爲什麼是這樣/我做錯了什麼?這是否與window.open的引用有關?

這是腳本:

var printPage = function(container){ 

    $('.printButton').click(function(){ 

     var printWindow = window.open('printWindow.html'); 

     var contentFromParent = $(container).eq(0).html(); 

     /*works for IE, but not FF 
     printWindow.alert('works for IE, but not FF'); 
     printWindow.document.getElementById('wrap').innerHTML = contentFromParent;*/ 

     /*works for FF and Chrome but not IE:*/ 
     printWindow.onload = function(){ 
      printWindow.alert('works for FF and Chrome but not IE'); 
      printWindow.document.getElementById('wrap').innerHTML = contentFromParent;   
     } 

     /*I also tried: 
     $(printWindow.document).ready(function(){ 
      printWindow.alert('load the page, fill the div'); 
      printWindow.document.getElementById('wrap').innerHTML = contentFromParent; 
     }); //works for IE, not working for FF/Chrome*/ 
    }) 
} 
printPage('#printableDiv'); 

的HTML:

<div id="wrap"> 
    <button href="#" class="printButton">Print</button> 
    <div id="printableDiv"> 
     <p>I want to see this content in my new window please</p> 
    </div> 
</div> 

UPDATE 感謝您對新窗口的onload指針 - 我已經走了這個解決方案現在:Setting OnLoad event for newly opened window in IE6 - 簡單地檢查DOM並延遲onload - 爲IE7/8/9工作。

我不確定您是否稱其爲「優雅」解決方案,但它的工作原理!進一步的意見,特別是如果你認爲這是有缺陷的,將不勝感激。謝謝。

var newWinBody; 
function ieLoaded(){ 
    newWinBody = printWindow.document.getElementsByTagName('body'); 
    if (newWinBody[0]==null){ 
     //page not yet ready 
     setTimeout(ieLoaded, 10); 
    } else { 
     printWindow.onload = function(){ 
      printWindow.alert('now working for all?'); 
      printWindow.document.getElementById('wrap').innerHTML = contentFromParent;   
     } 
    } 
} 
IEloaded(); 
+0

http://stackoverflow.com/questions/3030859/detecting-the-onload-event-of-a-window-opened-with-window-open – Ian 2013-05-10 14:37:18

回答

3

難道你設置事件處理程序printWindow.onload = ...之前打開的頁面觸發'onload'事件?

您可能會考慮在'printWindow.html'頁面中包含一些javascript。假設您在頁面末尾添加一個簡短的<script>var printWindowLoaded = true;</script>。然後你的主腳本會做這樣的事情:

function doStuff() { 
     //...   
    } 

if (printWindow.printWindowLoaded) 
    doStuff(); 
else 
    printWindow.onload = doStuff; 
+1

你說得對,負責人過早起火。因爲目標HTML文件不存在,所以我實際上找不到一種簡單的方法將您的解決方案應用到我的頁面上,但您的答案使我朝正確的方向發展。非常感謝! – soba3 2013-05-10 16:34:00