javascript - 替换文件主体,但js不运行

标签 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? 的解决方案!

最佳答案

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/

相关文章:

javascript - 将 Bootstrap Carousel 图像拆分成单独的幻灯片

javascript - 电子邮件验证并将值提交到数据库中

javascript - Ajax 正在提交文本,但无法提交 HTML 数据

javascript - 在 Javascript 中实现 minimax 算法

javascript - 如何添加可点击的问号以选择选项

jquery - jquery load 方法是否提供与 Rails Replace_html 方法等效的 ajax 功能?

javascript - 将所有 Ajax 代码放在一个 PHP 文件中是不是很糟糕?

javascript - 检查用户是否在线

javascript - meteor - 在选择更改时更新 var

javascript - 将 ajax json 输入发送到附加的 onclick js 函数