0

例如:

document.getElementById("test").innerHTML= "<script>document.write('worked')</script>";

结果是:

<div id="test"><script>document.write('worked')</script></div>

即没有运行JS。为什么我不让 .innerhtml 开始“工作”?这是技术能力的问题。是否可以在给定场景的 DOM 中运行 javascript?

谢谢

4

1 回答 1

3

仅将 innerHTML 设置为包含脚本标记的内容是不够的。您必须创建一个脚本元素并将其附加到 DOM。我相信其目的是在注入大量内容时提供一些跨站点脚本保护。

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);

示例:http: //jsfiddle.net/axvaT/

document.write不会像你想的那样工作。 document.write不会将文本放置在脚本标记所在的位置。相反,它会将文本放置在 HTML 解析器当前正在查看的位置。根据 JS 代码运行的时间,这些可能相同,也可能完全不同。

因此,出于这个原因,除其他外,永远不要document.write用于任何事情。曾经。 甚至调试。


最后,虽然有时注入一个指向其他 js 文件的脚本标记很有用:

var script = document.createElement('script');
script.src = 'somefile.js';
document.head.appendChild(script);

使用其中包含 JS 的脚本标记执行此操作是没有意义的。您正在使用 javascript 创建一个应该立即运行一些 javascript 的脚本标记。为什么不直接运行你想逃跑的 javascript,而不是创建一个新的脚本标签来为你做这件事呢?

所以不要这样做:

var script = document.createElement('script');
script.innerHTML = "alert('ran some JS');";
document.body.appendChild(script);

相反,只需执行以下操作:

alert('ran some JS');
于 2013-07-19T21:20:59.663 回答