在 Eval 中设置变量 (JavaScript)

2024-04-16

我正在编写一个 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”。

有任何想法吗?


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-c​​ode-仅有的/ 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/谈论问题eval在 ES 3 下。

但与此同时,eval 太强大了。正如内联汇编对于 C 或 C++ 的作用(至少没有 gcc 的 asm 语法所需的信息)一样,eval 对于 JavaScript 也是如此。在这两种情况下,强大的构造都会抑制许多优化。即使您不关心优化或性能,eval 引入和删除绑定的能力也会使使用它的代码更难以推理。

...

eval 添加绑定的能力较差。这使得在运行时之前无法说出名称所指的内容:

var v;
function test(code)
{
  eval(code);
  return v;
}

return语句中的v是否表示全局变量?如果不知道代码 eval 将编译和运行,你就无法知道。如果该代码是“var v = 17;”它引用一个新变量。如果该代码是“/* psych! */”,则它指的是全局变量。函数中的 eval 将取消优化该函数中引用封闭范围内的变量的任何名称。 (并且不要忘记名称 test 本身位于封闭范围内:如果函数返回 test 而不是 v,则在不知道代码的情况下无法判断该测试是引用封闭函数还是新变量。)

解决您的问题的一种可能的解决方案是使用不同的评估结构,例如(new Function('alert(rData); ' + ... + '; alert(rData);'))引入了完整的词汇环境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Eval 中设置变量 (JavaScript) 的相关文章

  • WooCommerce 自定义产品类型选项不隐藏自定义产品选项卡

    我刚刚向我的 WC 管理产品页面添加了自定义产品类型选项 add filter product type options this filter product type options 99 1 public function filte
  • Chrome 开发工具命中代码但未命中断点

    我在 chrome 开发工具上启用了断点 并且在一行上有一个断点 我知道 chrome 正在运行 因为我将断点放在具有以下语句的行上 alert why is this not breaking 如果我在本地主机中找到该文件 则断点有效 断
  • 角度垫排序不适用于带点表示法的 matColumnDef

    我正在尝试按列对表进行排序 当我必须过滤另一个结果中的结果时 就会出现问题 我尝试通过括号表示法和点表示法访问该属性 但没有给出结果 还将最终节点放置在 matColumnDef 中 但失败 因为有 2 列同名 table table
  • 如何将类型添加到 Vite 库构建中?

    我按照vite文档使用图书馆模式 https vitejs dev guide build html library mode我能够生成一个工作组件库 我创建了该项目vue ts预设 在我的组件中 我定义了道具及其类型 并使用了一些接口 但
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 在 jQuery 中获取 SELECT 的值和文本[重复]

    这个问题在这里已经有答案了 可能的重复 获取选择框中选定选项标签的值 https stackoverflow com questions 7380604 getting the value of the selected option ta
  • 如何调试超时等待异步 Angular 任务?无法在角度页面上找到元素

    编辑 请注意 在 ernst zwingli 的帮助下 我找到了问题的根源 因此 如果您遇到相同的错误 他指出的修复之一可能会帮助您 我的问题是量角器本身的一个已知问题 如果您认为这可能是您 我已经扩展了我的步骤 以在我最初的问题之后查明问
  • 在grails控制器中识别ajax请求或浏览器请求

    我正在开发一个使用大量ajax的grails应用程序 如果请求是ajax调用 那么它应该给出响应 这部分正在工作 但是如果我在浏览器中输入URL 它应该带我到主页 索引页面而不是请求的页面 下面是ajax调用的示例gsp代码
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • jquery 当前可见的第 n 个子级

    我可以像这样设置每 4 个 item div 的样式 jQuery item nth child 4n addClass fourth item 这工作得很好 但后来我隐藏了一些项目 显示了其他一些项目 并想重新做这个样式 但只对每第四个可
  • jQuery 中什么函数相当于 .SelectMany()?

    让我解释一下 我们知道 jQuery 中的映射函数充当 Select 如 LINQ 中 tr map function return this children first returns 20 tds 现在的问题是我们如何在 jQuery
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 在 Nodejs 中,如何停止 FOR 循环直到 MongoDB 调用返回

    我正在研究下面的代码片段 我有一个名为 stuObjList 的 JSON 对象数组 我想循环遍历数组以查找具有特定标志集的特定 JSON 对象 然后进行数据库调用以检索更多数据 当然 FOR 循环不会等待数据库调用返回并到达 j leng
  • 在javascript中创建图像的缩略图方块(不丢失纵横比)

    我正在制作一个客户端拖放文件上传脚本作为书签 在上传之前 我使用 File API 将图像读取为 base64 格式并将其显示为缩略图 This is how my thumbnails look like I want them to l
  • 标记(Markdown)+ Mermaid(流程图和图表)

    努力去争取 美人鱼 https github com knsv mermaid https github com knsv mermaid跟 共事 标记 https github com chjj marked https github c
  • 将两个数字相加将它们连接起来而不是计算总和

    我将两个数字相加 但没有得到正确的值 例如 做1 2返回 12 而不是 3 我在这段代码中做错了什么 function myFunction var y document getElementById txt1 value var z do
  • JQuery UI:将长元素放在光标位置而不是元素的中间

    我有一些很长的可拖动元素 可以将它们放入背景表的所有单元格中 当我开始拖动此类元素并将其悬停在可放置容器 表格的单元格 上时 了解元素将被放置到何处的 热点 点是其自身的中间 不幸的是 我的元素的中间通常不可见 并且将元素放在正确的位置是没
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • 如何获取符号名称(文字)?

    以下情况 var myVehicle brand Tesla var isMoving Symbol var currentStatus Symbol myVehicle isMoving true myVehicle currentSta
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • 在asp.net mvc中动态添加文本框并将值保存到数据库

    我想通过单击添加按钮动态添加文本框 可以删除文本框 最后可以保存文本框中的列表值 我的模特班 public class CustModel public List
  • 使用 ASP.New MVC 4 Web Api 进行授权过滤器依赖注入

    我正在尝试在 MVC 4 Web Api 授权过滤器上实现依赖项注入 我创建了一个继承自 ActionDescriptorFilterProvider 的 FilterProvider public class UnityWebApiFil
  • jQuery validate:如何添加正则表达式验证规则?

    我正在使用jQuery http en wikipedia org wiki JQuery验证插件 好东西 我想迁移现有的 ASP NET 解决方案以使用 jQuery 而不是 ASP NET 验证器 我缺少替代品正则表达式验证器 我希望能
  • Unity3d NavMeshAgent.isOnNavMesh 在特定功能中变为 false

    我更改了标题以反映添加的澄清信息 我正在遵循 Unity 教程 1 当需要测试播放器单击控件时 Unity 给出了一个错误 SetDestination 只能在已放置在导航网格上的活动代理上调用 据我所知 我的代理处于活动状态并且位于 na
  • Android IPC远程服务调用显示错误

    我想做一个关于IPC通信 服务之间的通信 的演示应用程序 我在用AIDL为了那个原因 我发现大部分教程RemoteService和客户端在同一个包中 我实际上是分开做的 同时传递我正在使用的对象Parcelable方法和面临的错误 它说就像
  • C++ 中函数原型和函数实现有什么区别?

    我应该将我的实现放在一个文件中 将原型放在头文件中 但按照我的理解 充满原型的头文件不会很有用 这些是什么东西 其中之一与定义或声明相同吗 函数原型是声明其参数类型的函数声明 这种区别是历史性的 在 C 中 可以声明没有原型的函数 但在 C
  • 如何获取 Kubernetes POD 的活动连接数

    我是 Kubernetes 新手 对于我们的应用程序 我需要找到 pod 的活动连接数 我分析了一下 发现我们可以使用 Istio 等 Kubernetes 插件来获取此类数据 但我了解到 使用此类插件可能会导致内存命中 因为插件为每个 P
  • Python Flask Cors 问题

    我对 Python 有点陌生 但在使用 Node 应用程序时遇到了同样的问题 我正在向本地 Python 服务器发出一个非常标准的 jQuery AJAX 请求 init function callback var token config
  • 非交互式“git flow release finish”

    我如何使用git flow release finish以不要求合并提交消息的方式 这 m正如我所料 flag 没有提供此功能 当然 目标是能够以不需要交互的方式编写脚本 可以设置环境变量 export GIT MERGE AUTOEDIT
  • Maven-resources-plugin不会复制.metadata文件夹

    我正在尝试使用 maven resources plugin 复制文件夹或以下结构 root metadata Project gitignore 项目目录和 gitignore 文件被复制 但 metadata 目录由于某种原因被遗漏 如
  • Go:使用 gdb 打印变量

    在此程序中 如何使用调试器中断执行并打印 i 的值 package main import fmt func main x abc i 3 fmt Println i fmt Println x 我无法打印我 不过我可以打印 x go bu
  • 将工具栏设置为片段中的操作栏

    我想将我的工具栏设置为操作栏 但由于您的工具栏是布局元素 因此它必须位于您的布局中 现在我的布局在我的片段中 我在布局中添加了工具栏 并在片段中调用它 Toolbar Toolbar toolbar Toolbar getActivity
  • 如何有条件地要求 Angular 4 中的表单输入?

    我正在使用模板驱动的表单来添加任务 并且有 2 个数字类型的输入字段用于估计完成任务的分钟数 一个字段用于估计小时数和 另一个是完成任务的估计分钟数 因为任务估计可以在几小时内完成 例如1hrs 或者像这样的小时和分钟1小时30分钟 所以我
  • PHP7 - nusoap - nusoap_client 有一个已弃用的构造函数

    我想用nusoap on Laravel 5 3 with PHP7 但是当我生病时尝试安装它composer从该包中 https github com codecasts nusoap php7 https github com code
  • unique_together 中的多个元组

    当我定义模型并在元中使用 unique together 时 我可以定义多个元组 这些是进行 OR 运算还是 AND 运算 可以说我有一个模型 class MyModel models Model druggie ForeignKey dr
  • 给定一个字符串数组,返回所有属于字谜词组的字符串

    给定一个字符串数组 返回所有属于字谜词的字符串组 我的解决方案 对于数组中的每个字符串单词 对其进行排序 O m lg m m 是单词的平均长度 建立一个哈希表 将排序后的单词作为键放入哈希表中 并生成该单词的所有排列 O m 如果字典中存
  • 用于验证 Google Analytics UA 编号的正则表达式

    我并不是 100 清楚 Google Analytics UA 编号始终是 6 位数字 一个破折号和 2 位数字 正如 Google 在其文档中经常提到的那样 常见的反例是帐户部分使用少于 6 个 配置文件使用少于 1 4 个 所有示例都始
  • WCAG:应用样式时,Firefox 和 Edge 不会在焦点输入元素上显示轮廓

    我正在创建一个表单 它遵循一些 WCAG 准则 其中之一是 G165 使用平台的默认焦点指示器 以便继承高可见度的默认焦点指示器 https www w3 org TR 2016 NOTE WCAG20 TECHS 20161007 G16
  • 不同日志文件中不同级别的日志

    我们如何编写一个简单的 log4j2 xml 文件 将不同级别的日志放入不同的文件中 例如 我们有错误日志和任何信息日志 我需要将所有错误日志消息推送到一个日志文件中 并将所有信息日志消息推送到另一个文件中 我希望 InfoControll
  • 在 Eval 中设置变量 (JavaScript)

    我正在编写一个 GreaseMonkey 脚本 使用 JQuery 并且我需要一些由原始页面中的脚本设置的变量 如下所示 我从另一个页面获取这个元素并尝试评估它 奇怪的是这不起作用 get link url null function da