2012-08-08 62 views
4

我試圖將DOM節點從「根」頁面移動到通過window.open()創建的新彈出窗口。這是我正在使用的代碼。將DOM節點移動到彈出窗口

var win = window.open('/Search/Print', 'printSearchResults'), 
    table = $('#printTable'); 
win.document.close(); 
setTimeout(function() { 
    var el = win.document.createElement("table"); 
    el.innerHTML = table.html(); 
    win.document.body.appendChild(el); 
}, 40); 

它適用於Chrome,但在IE8中,我收到以下錯誤:「未知的運行時錯誤。」

我也試着這樣說:

var p = window.open('/Search/Print', 'printSearchResults'), 
    table = $('#printTable'); 
setTimeout(function() { 
    p.document.body.appendChild(table.clone(false)[0]); 
}, 100); 

這樣做,這樣,我收到IE8「支持沒有這樣的接口」。 Chrome再次正常工作。

有沒有人有辦法做我想達到的目標?

這裏是彈出窗口中的HTML只是爲了完整起見:

<!DOCTYPE html> 
    <html> 
    <head> 
     <title>Print Results</title> 
    </head> 
    <body> 
    </body> 
</html> 
+0

我不知道這是否是問題,但任意'setTimeout()'調用是處理異步加載的非常糟糕的方式。改爲使用新窗口的'onload'處理程序。 – nrabinowitz 2012-08-08 16:30:33

回答

1

我在IE9(和IE8/7瀏覽器模式)上測試了你的代碼。

而不是el.innerHTML = table.html();

使用jQuery $(el).html(table.html());固定的問題。

1

爲了能夠使用iframe的新窗口,你應該ADDRES初始化它們:約:空白,前你寫()給他們。另請注意,加載/打開窗口/框架需要時間,所以您無法立即寫入它們。設置超時,或檢查onload。 有關更多信息,請參閱this answer

祝你好運!

相關問題