例如:
document.getElementById("test").innerHTML= "<script>document.write('worked')</script>";
结果是:
<div id="test"><script>document.write('worked')</script></div>
即没有运行JS。为什么我不让 .innerhtml 开始“工作”?这是技术能力的问题。是否可以在给定场景的 DOM 中运行 javascript?
谢谢
例如:
document.getElementById("test").innerHTML= "<script>document.write('worked')</script>";
结果是:
<div id="test"><script>document.write('worked')</script></div>
即没有运行JS。为什么我不让 .innerhtml 开始“工作”?这是技术能力的问题。是否可以在给定场景的 DOM 中运行 javascript?
谢谢
仅将 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');