【问题标题】:How to append a line of JavaScript (rather than an exteral .js file)?如何附加一行 JavaScript(而不是外部 .js 文件)?
【发布时间】:2011-03-17 02:23:01
【问题描述】:

我想将执行一行 JavaScript 的脚本标签附加到文档的开头,而不是附加一个空的并使用 src 属性的脚本标签。

这是我目前得到的:

<script type="text/javascript">
var scriptContents = 'alert("hi")';
var theScript = document.createElement('script');
theScript.type = 'text/javascript';
theScript.appendChild(scriptContents);
document.getElementsByTagName('head')[0].appendChild(theScript);
</script>

这是我遇到问题的 appendChild(scriptContents) 部分。如何更改此设置以使警报出现在浏览器中?

【问题讨论】:

  • 嗯,只是举个例子——你的行为与使用eval( theScript )简化的行为不同吗?
  • 是的,我知道这很有趣。我需要使用 JavaScript 来插入 HTML 元素,而这个 HTML 元素是一个脚本标签,里面有一些 JavaScript。
  • 我想你可能误解了杰克在说什么。如果你只是想运行一个脚本,你可以使用 eval 函数。
  • 出于难以理解的原因,客户端希望将脚本元素插入 DOM,而不是运行脚本。
  • 但是……但是……将它插入 DOM 将运行脚本……我很困惑。 :P

标签: javascript html dom


【解决方案1】:

你做不到

theScript.appendChild(scriptContents);

appendChild() 只能追加节点,不能追加文本。您需要创建一个文本节点:

var scriptContents=document.createTextNode('alert("hi");')

但是,正如 Jake 上面提到的,您可能只想这样做:

eval('alert("hi")');

【讨论】:

  • var scriptContents=document.createTextNode('alert("hi");') 效果很好。从最早的时候我就被教导 eval() = bad。请问我为什么要用它呢?
  • 当教授“eval() = bad”时,你需要问自己“为什么?”。执行任意用户输入是不好的,使用 eval() 很容易发生这种情况;将用户输入附加到 &lt;script&gt; 标记并让它执行同样容易......
  • 我总是被认为 eval() 有很大的开销。虽然,是的,执行任意用户输入也很糟糕。
  • 开销也是一个因素,不过(虽然我没有对此进行测试 - 我可能错了)我无法想象在运行时将字符串粘贴到脚本元素中会非常有效。跨度>
【解决方案2】:

您需要将其附加为文本节点。试试这个:

theScript.appendChild(document.createTextNode(scriptContents));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2011-06-11
    • 2017-07-02
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多