Javascript .onload没有在IE中解雇? window.open引用问题?

时间:2013-05-10 14:25:50

标签: javascript jquery onload window-object

到目前为止,我还没有理解相关问题的答案(根据我的知识水平),所以......

我有一个简单的脚本(使用jQuery),它打开一个新窗口,并将父节点中的某些内容添加到子节点内的指定容器中。我不确定这是我的方法是错还是我只是错过了一个步骤 - 在新窗口上运行的脚本在IE中运行时它在window.onload函数之外,但这会打破FF和FF当它在window.onload内时很高兴,但IE中的新窗口似乎没有做任何事情(没有警报,没有添加内容,nada)。

请有人向我解释为什么会出现这种情况/我做错了什么?是否与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>

更新 感谢你在新窗口中关于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();

1 个答案:

答案 0 :(得分:3)

在您设置事件处理程序printWindow.onload = ...之前,您打开的页面是否可以触发'onload'事件?

您可以考虑在“printWindow.html”页面中添加一些javascript。假设您在页面末尾添加了一个简短的<script>var printWindowLoaded = true;</script>。那么你的主脚本会做这样的事情:

function doStuff() {
        //...          
    }

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