我尝试用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?的解决方案!
答案 0 :(得分:2)
脚本元素结束标记为javascript解析器创建了一个问题。在这种情况下,您必须更改脚本元素的结束标记。
这段代码将起作用
var newDoc = document.open("text/html", "replace");
资源:
javascript embedding <script> tags in document.write not working
newDoc.write("alert('dfdfd');</scr"+"ipt>");`