更改iframe的innerHTML时脚本不会执行

4
我想用JavaScript加载iframe的内容。我不想改变src,而是直接使用以下代码更改内容:
document.getElementById('frame').contentDocument.body.innerHTML = data;

它可以工作,但是data中的JavaScript没有执行。这是安全保护还是我忘记了什么?


你的代码直接写在body元素里吗? - xdevel2000
4个回答

3

看起来问题不是iframe,而是在使用innerHTML将脚本插入到DOM文本时未执行脚本。

您可以查看以下Stack Overflow帖子,了解几种解决方案:


问题在于我得到了一个 HTML 页面,但无法修改它。 - Charles
你最好使用像jQuery这样的JavaScript框架来进行AJAX调用。jQuery.ajax()能够非常容易地评估JavaScript代码。你可能想查看以下SO帖子以获取更多信息:https://dev59.com/CnE95IYBdhLWcg3wrP-w - Daniel Vassallo

1

使用此方法可在各种浏览器中获取文档

//returns iframe document
function getIFrameDocument(iframe) {
    var doc;
    if (iframe.contentDocument) {//FF-Chrome
        doc = iframe.contentDocument;
    } else if (iframe.contentWindow) {
        doc = iframe.contentWindow.document;
    } else if (iframe.document) {//IE8
        doc = iframe.document;
    } else {
        doc = window.frames[iframe.id].document;
    }

    return doc;
}

0

试试这个

在一个名为index.html的页面中写入:

<script type="text/javascript">

    function init() 
    {
        var s = document.createElement("script");

        s.innerHTML="alert('ops');"    

        document.getElementById("frame").contentDocument.getElementsByTagName("body")[0].appendChild(s);
    }

    window.onload = init;
</script>

...

<body>
    <form id="form1">
    <div>
    <iframe id="frame" src="test.html"></iframe>
    </div>
    </form>
</body>

然后只需像这样编写test.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>

</body>
</html>

从Web服务器加载index.html文件,代码就可以运行!


问题在于我从ajax获取了完整的HTML页面。我将从html到/html获取一个带有JavaScript的HTML页面。 - Charles
但是,如果您获取了完整的网页,则不应将其插入到body标记中,因此您应更改frame标记的src属性。 - xdevel2000
我使用Ajax发布帖子并获取页面作为响应。 - Charles

0

有类似以下的东西会起作用。

<iframe id = "testframe" onload = populateIframe(this.id);></iframe>

// The following function should be inside a script tag

function populateIframe(id) { 

    var text = "This is a Test"
var iframe = getObj(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else {
    doc = iframe.contentWindow.document; 
}

doc.body.innerHTML = text; 

  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接