【问题标题】:JavaScript: Dynamic Script Loading without manipulating the DOM?JavaScript:在不操作 DOM 的情况下动态加载脚本?
【发布时间】:2012-02-23 14:30:31
【问题描述】:

如何通过 JavaScript 代码添加外部 JavaScript(-library) 到页面,而无需:

  • 操作 DOM
  • 最好不使用Eval?

这意味着不允许通过 JavaScript 添加script-tag。

JSLint 告诉我“Eval is Evil”,所以我正在寻找是否有选项。一个可以通过 JSLint。

请避免使用框架回答,但研究 jQuery、ExtJS、Require.js 等如何解决动态脚本加载会很有趣。

【问题讨论】:

  • 有什么理由要加载没有 eval 或 <script> 标签的任意文件?
  • 因为我现在工作的环境不允许使用脚本标签并且 eval 是邪恶的。这些信息会改变你的答案吗?
  • eval 是一种工具,但几乎从来都不是适合这项工作的工具。 Eval is Evil 是一个概括。听起来你可能有一个奇怪的边缘情况,它是这项工作的唯一工具。 (该工具或正确的工具是一把大锤,适用于您正在工作的可能人为限制)。
  • 如果 eval 是您需要做的事情,那么 eval 就是适合这项工作的工具。但是,从您的示例来看,您似乎需要 script/@src。
  • @SebNilsson 不知道为什么人们不赞成投票......但你是这个问题上第一个使用“jQuery”这个词的人......

标签: javascript dynamic-script-loading


【解决方案1】:

除了使用new Function(String); 之类的东西(实际上是eval 通过代理,因此在eval 因邪恶而被排除在外的任何情况下都不是一个选项),你不能。

【讨论】:

  • @RobW — 不,从文件中提取字符串然后对其进行操作。
  • 它仍然是一个隐含的eval
  • @jAndy — 是的,我说过(因为它是隐含的eval,所以我没有费心去弄清楚字符串操作的细节)。
  • +1 至少可以尝试一下创造力,即使留在eval 似乎比这更好:P
【解决方案2】:

我真的认为你的意图没有任何理由。您的问题是关于“动态脚本加载”,因此没有“eval is evil”语音。

您显然要加载和执行 ECMAscript 代码,这是使用 eval 的一个非常有效的点。由于这是您声明的目标(执行 javascript 代码),您使用 eval 的确切问题是什么?无论您如何执行该代码,它可能总是危险的或恶意的。没有可用的“.evalButBeCareful()”方法(目前)。

所以我最好的猜测是,你有点想在不让用户知道的情况下加载一些代码。幸运的是,这是不可能的。对新手隐藏代码可能是可能的,但如果有人愿意,他总是可以很容易地看到加载到当前站点的内容。

【讨论】:

  • 目的只是为了更多地了解 JavaScript 和脚本加载。如果答案是eval,那就这样吧。发现知识...
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 2012-06-08
  • 2015-05-16
  • 1970-01-01
相关资源
最近更新 更多