我尝试用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? 的解决方案!
最佳答案
script 元素结束标记会导致 javascript 解析器出现问题。在这种情况下,您必须更改脚本元素的结束标记。
这段代码可以工作
var newDoc = document.open("text/html", "replace");<code>
</code>newDoc.write("alert('dfdfd');</scr"+"ipt>");`
来源:
javascript embedding <script> tags in document.write not working
关于javascript - 替换文件主体,但js不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23166043/