执行以字符串形式存储的 JavaScript 代码

IT技术 javascript
2021-02-05 21:54:27

我如何执行一些作为字符串的 JavaScript?

function ExecuteJavascriptString()
{
    var s = "alert('hello')";
    // how do I get a browser to alert('hello')?
}
6个回答

使用该eval功能,例如:

eval("my script here");
@divinci 这称为“跨站点脚本”。请参阅此处:en.wikipedia.org/wiki/Cross-site_scripting
2021-03-23 21:54:27
小心点 !这将执行代码,因此请注意您从何处/如何获得此字符串。请注意,任何人都可能试图在您的字符串中插入恶意代码。
2021-04-01 21:54:27

您可以使用函数执行它。例子:

var theInstructions = "alert('Hello World'); var x = 100";

var F=new Function (theInstructions);

return(F());
我在 try/catch 块中尝试过这个,它工作得很好。我现在可以将任何输入到文本块中的 JavaScript 代码传递给我的函数,然后执行它。然后,catch 块可以将来自 JavaScript 引擎的错误消息插入到 DOM 元素中,并显示代码中的任何错误。如果有人想要我写的函数,我整理好之后就可以贴在这里了。
2021-03-26 21:54:27
但最终 - 这与调用不一样var F=function(){eval(theInstructions);};吗?
2021-03-27 21:54:27
@DavidEdwards 如果你还有它并发布它会很棒。
2021-04-02 21:54:27
是和否:使用 eval 代码也将执行,而使用 Function() 代码直到 F() 才执行(用例?检查语法错误但不想执行代码)
2021-04-05 21:54:27
@stefan 这是美丽的... new Function("alert('Hello World');")()
2021-04-06 21:54:27

eval函数将评估传递给它的字符串。

但使用eval可能有危险,因此请谨慎使用。

编辑: annakata 有一个优点——不仅eval 危险,而且 速度慢这是因为要评估的代码必须当场解析,这样会占用一些计算资源。

@coobird 我知道这有点晚了,但为什么这很危险?用户可以使用控制台轻松地在您的网站上运行 JavaScript 代码。
2021-03-11 21:54:27
如果您的安全性完全取决于客户端 javascript,那么您就搞砸了,这与 eval 无关。
2021-03-13 21:54:27
我怀疑它是否比在页面上的任何其他地方加载 JavaScript 慢,这也必须被解析。如果它更慢,那是因为它是在不同的范围内完成的,这可能会强制为该范围创建资源。
2021-03-18 21:54:27
如果你说eval()是危险的。有什么替代方法吗?
2021-04-06 21:54:27
超级危险和缓慢 - 你应该用粗体、斜体、下划线和 h1 表示
2021-04-07 21:54:27

使用 eval()。

W3 学校 eval 之旅站点有一些可用的 eval 示例。Mozilla 文档详细介绍了这一点。

您可能会收到很多关于安全使用它的警告不允许用户向 eval() 注入任何东西,因为这是一个巨大的安全问题。

您还想知道 eval() 具有不同的作用域

w3fools.comW3C 甚至没有任何关于 eval 的说法。如果你想链接到官方的东西,目标ecma-international.org/ecma-262/5.1/#sec-15.1.2.1
2021-03-11 21:54:27
我不想“链接到任何官方的东西,我想链接到一些可读的东西——看看链接的东西,它没有解释它是如何使用的,没有例子,没有办法修补,并孤立地描述了方法. 对于初学者来说,这是一个完全不合适的链接。嘿,你不会碰巧是@bjorninge,对吗?
2021-03-13 21:54:27
该规范eval比 W3Schools 文章对我的描述更好。具有良好解释和示例的可读内容是developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...不,我不是bjorninge
2021-03-17 21:54:27
关于 ecma-international.org 链接,我将其描述为具有 15 分钟以上 JS 经验的每个人都可以阅读和理解。这是很不错的。
2021-03-21 21:54:27
我同意它不是文档,并且我同意 mozilla 的页面是它的一个更好的整体画面。根据反馈稍微调整了我的答案
2021-03-30 21:54:27

试试这个:

  var script = "<script type='text/javascript'> content </script>";
  //using jquery next
  $('body').append(script);//incorporates and executes inmediatelly

就个人而言,我没有测试它,但似乎有效。

你忘了在脚本中转义结束 >: var script = "<script type=\"text/javascript\"> content </script\>";
2021-03-25 21:54:27
为什么你需要逃避结束 > ?
2021-04-02 21:54:27