替换文档正文,但js没有运行

时间:2014-04-19 04:58:00

标签: javascript ajax

我尝试用XMLHttpRequest返回的responseText替换整个html内容,但似乎responseText中的js没有生效。

这是代码:

 var newContent= evt.target.responseText;

 var newDoc = document.open("text/html", "replace");
 newDoc.write(newContent);
 newDoc.close();

即。 NewConent中的js不会运行。

是否有可能使其有效?感谢。

操作系统是Mac,浏览器是Chrome。

也在Mac上尝试过Firefox,也不起作用。

更新

让它与另一轮评估一起工作。

document.body.innerHTML = responseText;
var arr = document.getElementsByTagName('script')
//run script inside div
for (var n = 0; n < arr.length; n++) eval(arr[n].innerHTML)

https://developer.mozilla.org/en-US/docs/Web/API/element.innerHTML HTML5指定不应执行通过innerHTML插入的标记。

也尝试了建议的解决方案。

var rawtext= responseText.replace(/\<\/script\>/g,'</scrxxxxxipt>' );
var fragments= rawtext.split(/xxxxx/);
var newDoc = document.open("text/html", "replace");
for (var i=0; i<fragments.length; i++)
{
        newDoc.write(fragments[i]);
}
newDoc.close();

这个解决方案确实使普通的js工作。但是我有一些requirejs文件,它不能很好地工作。

顺便说一句。我找到了基于Can scripts be inserted with innerHTML?的解决方案!

1 个答案:

答案 0 :(得分:2)

脚本元素结束标记为javascript解析器创建了一个问题。在这种情况下,您必须更改脚本元素的结束标记。

这段代码将起作用 var newDoc = document.open("text/html", "replace"); newDoc.write("alert('dfdfd');</scr"+"ipt>");` 资源: javascript embedding <script> tags in document.write not working