1

我有这个代码:

<script id="toModify" >
Invalid javascript that will cause errors
</script>

<script>
var s=document.getElementById("toModify");
s.innerHTML="alert('Hi')";
</script>

它不起作用。

我知道我至少需要做两件事才能使它起作用:

  • 防止第一个脚本第一次运行。
  • 修改后,重新运行第一个脚本。

我该怎么做这些事情?还有什么我需要做的吗?

4

3 回答 3

1
  • 使用type属性使浏览器不执行脚本:

    <script id="toModify" type="text/x-custom-whatever">...</script>
    
  • 只是eval()执行它的代码。

当然,动态生成代码是充满危险的;要非常小心,不要引入安全漏洞。

于 2012-07-02T18:47:49.320 回答
1

为脚本设置与不支持的“text/javascript”不同的类型将使脚本无法得到处理。

所以<script id="toModify" type="text/unprocessed">...</script>

然后您可以创建一个类型为 script 的新元素,设置其 innerHTML 并将其附加到文档中。

就像是

var s = document.getElementById("toModify");
var processed = document.createElement('script'); // create a new script element

processed.innerHTML = "alert('Hi')"; // or do something with the s.innerHTML
document.body.insertBefore(processed, document.body.firstChild); // add the new element to the body, it gets executed immediately..

演示在http://jsfiddle.net/GG7cT/

于 2012-07-02T18:51:09.130 回答
-1

你不能。第一个脚本将始终首先运行。即使它具有defer属性,我也不确定您是否能够更改其内容。

另请参阅此答案

于 2012-07-02T18:49:22.377 回答