IE中的jQuery load()回调失败

时间:2013-11-22 16:46:37

标签: javascript jquery internet-explorer iframe load

大家好,在发布之前,我已经走了很多地方,试图解决问题,但不能。 This是我遇到的最接近的事情。

我正在尝试动态创建iframe并将内容加载到其src,然后使用回调对其执行某些操作。与往常一样,除IE之外,一切都在FF / Chrome中运行。

我有这样的事情:

var iframe = $('#helloworld');
if (!iframe.exists()) {
    iframe = $('<iframe/>', { 
        id : 'helloworld',
        src : "about:blank"
    }).css({
        width : "100%",
        height : "100%"
    });
}

...

iframe.load(options.src, function() {
    div.append(this);
    $(this).find('body').append(box);
    box.dialog({
        close: function( event, ui ) {
            iframe.load("about:blank");
            div.hide();
        }
    });
});

与许多其他人的问题类似,它在回调中失败了。从我在其他帖子中看到的,这是由于无效的html回到iframe,但是,我已经检查过了,我的html是有效的。

这就是我为iframe返回的内容,因为您可以看到已经被剥离到最低限度以用于测试目的。

<!DOCTYPE html>
<html dir="ltr">

    <head>
        <title>Testing</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
        <style type="text/css">
        </style>
    </head>

    <body></body>

</html>

在IE中,jQuery正在死于@ line 5951:

append: function() {
    return this.domManip(arguments, true, function( elem ) {
        if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
            this.appendChild( elem );
        }
    });
},

SCRIPT65535:意外调用方法或属性访问。 jquery-1.9.1.js,第5951行5字符

this应该是我的iframe,而且没有appendChild方法。

我有什么提示要进一步解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你不能像iframe一样使用load()。如果您想知道何时在iframe中加载内容,请使用onload事件并设置src属性。

iframe.on("load", function() {
    //code here
});

iframe.attr("src", options.src);

加载内容后,您将收到回调。

现在要使用iframe中的内容,您需要使用contents()

iframe.contents().find("body")...

答案 1 :(得分:0)

据我所知.load将HTML加载到指定节点。

所以iframe.load(options.src, /* */);

将加载options.src的值作为iframe的HTML正文。我怀疑你想要那个。

我想你想要:

iframe.attr("src", options.src);
// or
iframe.attr("src", "about:blank");