在 Eval 中设置变量 (JavaScript)
我正在编写一个 GreaseMonkey 脚本(使用 JQuery),并且我需要一些由原始页面中的脚本设置的变量,如下所示:
<script type="text/javascript">
var rData = {"20982211":[1,0,1],"20981187":[8,0,4]};
</script>
我从另一个页面获取此元素并尝试评估它,奇怪的是这并没有工作:
$.get(link_url, null, function(data) {
alert("1:" + rData);
eval($(data).find("script").text());
alert("2:" + rData);
}
奇怪的是,在 firebug 控制台上它可以工作(我只是在没有 .get 的情况下直接在目标页面上尝试了 eval),但当我运行脚本时却没有。它在两个警报中都给了我“null”。
有什么想法吗?
i'm writing a GreaseMonkey script (using JQuery), and i need some variables that are set by a script in the original page, like this:
<script type="text/javascript">
var rData = {"20982211":[1,0,1],"20981187":[8,0,4]};
</script>
I fetch this element from another page and try to eval it, put strangely this doesn't work:
$.get(link_url, null, function(data) {
alert("1:" + rData);
eval($(data).find("script").text());
alert("2:" + rData);
}
The strange thing is on the firebug console it works (i just tried the eval directly on the targetpage without the .get), when i run the script though it doesn't. It gives me "null" in both alerts.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
EcmaScript 5 重新定义了
eval
,以便它无法将变量绑定添加到封闭的词法环境。http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that -code-only/讲的是ES 3下
eval
的问题。)解决您的问题的可能方法是使用不同的评估构造,例如
(new Function('alert(rData); ' + ... + ';alert(rData);'))
引入了完整的词汇环境。EcmaScript 5 redefined
eval
so that it cannot add variable bindings to the enclosing lexical environment.http://whereswalden.com/2011/01/10/new-es5-strict-mode-support-new-vars-created-by-strict-mode-eval-code-are-local-to-that-code-only/ talks about the problems with
eval
under ES 3.One possible solution to your problem is to use a different evaluation construct, e.g.
(new Function('alert(rData); ' + ... + '; alert(rData);'))
introduces a complete lexical environment.