问题标签 [spidermonkey]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spidermonkey - 蜘蛛猴引擎中 JS_CANONICALIZE_NAN 的目的是什么?
我想知道 JS_CANONICALIZE_NAN 的目的是什么,是否所有平台都需要它?
c++ - 如何在蜘蛛猴嵌入中提供 js-ctypes?
概括
我已经查看了 SpiderMonkey 'shell' 应用程序用于创建 ctypes JavaScript 对象的代码,但我不是新手 C 程序员。由于现代构建系统发出的不同程度的疯狂,我似乎无法追踪实际将程序与所需功能联系起来的代码或命令。
方法.疯狂
Mozilla Devs 的这个 js-ctypes 实现是一个很棒的补充。从它的概念开始,脚本就主要用于对更严格和更健壮的应用程序进行控制。SpiderMonkey 项目中 js-ctypes 的出现,使 JavaScript 能够站起来,并被视为一种成熟的面向对象的快速应用程序开发语言,高出各种古老的应用程序开发语言(如 Microsoft 的 VB6)设定的“标准”。
让我们开始?
我用这个配置构建了 SpiderMonkey:./configure --enable-ctypes --with-system-nspr
然后成功执行:make && make install
js shell 工作正常,全局 ctypes javascript 对象已在该 shell 中验证可操作。
使用How to embed the JavaScript Engine -MDN中第一个源代码清单中的代码,我尝试通过在第 66 行插入以下代码来实例化 JavaScript ctypes 对象:
我编译时使用: g++ $(./js-config --cflags --libs) hello.cpp -o hello
它编译时带有一些警告:
但是当你运行应用程序时:
而且
JS_InitCTypesClass 在 'dist/include/jsapi.h' 中声明为 extern,但该函数驻留在 'ctypes/CTypes.cpp' 中,其中包括自己的头文件 'CTypes.h' 并在某些时候由某些命令在 'make' 期间编译产生'./CTypes.o'。正如我之前所说,我对 C 代码还不是新手,我真的不知道在这里做什么。
请给出或给出一个使 js-ctypes 对象在嵌入中起作用的通用示例。
spidermonkey - 蜘蛛猴类型错误
我已经设法将 Spidermonkey 集成到我在 Linux 上的 C 服务器端应用程序中。尝试从 javascript 创建一个对象:
给出以下错误:
[错误] test.js:22:TypeError: obj.foo 不是函数
我可能遗漏了一些东西......这是 MyObject 的定义方式:
javascript - 在 SpiderMonkey 中运行“chrome”代码
我在我的应用程序中嵌入了 Mozilla 的 SpiderMonkey,并希望使用它在 v1.8.6 中引入的新 调试器 API 。从文档中,我了解到此 API 不适用于“内容代码”,而只能用于受信任的所谓“chrome 代码”。现在,我浏览了许多资源,试图了解如何执行“chrome 代码”,但没有取得多大成功。我的猜测是应该使用 JS_EvaluateScriptForPrincipals 执行受信任的脚本,但是我无法理解如何使用 JSPrincipals ......
任何帮助表示赞赏,谢谢!
spidermonkey - JS_NewPropertyIterator 与 JS_Enumerate
JS_NewPropertyIterator() 和 JS_Enumerate() 有什么区别?
两者似乎都完成了相同的任务:迭代对象的自身属性。
javascript - 蜘蛛猴和垃圾收集
我将 Spidermonkey 嵌入到我的 C++ 应用程序中。我需要在本机 C++ 中实现一些自定义 Javascript 函数,这些函数传递一个 jsval。我需要保护 jsval 免受意外垃圾收集。我这样做是否合适:
(1) 在初始化例程中:
(2) 在一个实现 Javascript 函数 setter() 的 c++ 函数中:
(3) 在实现 Javascript 函数 getter() 的同一编译单元内的第二个 C++ 函数调用中:
我的 Javascript 脚本使用如下函数调用:
请注意,我从不调用 JS_RemoveRoot(),因为静态 jsval vp是在 2 个函数调用之间传递的我的 jsval 的永久存储。而且,我不断在我的 setter() 中为 gc 根静态变量 vp 设置新值,假设存储在 jsval 中的任何 previouis JSObject 都可用于垃圾收集。
这些是创建可以跨函数调用传递的 gc 根临时变量的正确方法吗?特别是,我的 setter() 替换以前的 JSObject 的方式是使现有 JSObject 可用于 gc 的正确方法(即没有内存泄漏/崩溃)。
编辑:我认为垃圾收集是一个问题的原因是:
https://developer.mozilla.org/En/SpiderMonkey/JSAPI_User_Guide
在 JSAPI 概念、Javascript 值部分下:
jsval 本身并不能保护其所指对象免受垃圾收集器的影响
https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips
示例 3 说“随你去的根”,并展示了如何将 jsval 分配给根。
javascript - 在 SpiderMonkey 编译器入口点确定事件处理程序的安全主体
目前,SpiderMonkey 的nsJSContext::CompileEventHandler函数使用 null principals 编译事件处理程序。因此,在 Spidermonkey 的frontend::CompileFunctionBody函数中,目前无法将主体与事件处理程序关联起来。稍后,事件处理函数的主体在nsScriptSecurityManager::CheckFunctionAccess中确定。
我的问题是,可以在编译器的入口点检测到事件处理程序的安全主体吗?我对此的直觉如下:通常事件处理程序附加到 DOM 元素,其主体是容器文档。是否存在事件处理程序由与容器文档不同的主体调用的极端情况?如果以上为真,事件处理程序的主体是否可以从frontend::CompileFunctionBody函数的“文件名”属性中确定(例如,chrome:// URI 表示系统,http:// uri 表示非系统)?
(顺便说一句。我们如何检测 about:protocol 文件的主体?有时它们是“系统”,有时不是)
javascript - 蜘蛛猴:为什么 JS 数组不继承长度、拼接等默认属性
实际上,我对蜘蛛猴 api 和这个邮件列表都是新手。实际上我试图创建一个像 objectA.arrayA 这样的数组,回调代码是这样的。
我得到了 objectA.arrayA 的正确值,但是当我执行 objectA.arrayA.length 时,它说 arrayA 没有 ay 属性。你能告诉我我做错了什么吗?即使我正在制造刺痛,我也面临着同样的情况。
shell - 为什么当我调用 clear() 函数时,spidermonkey 会给我一个分段错误?
一点帮助。我刚刚在 debian 上构建了 spidermonkey(./configure、make、make install),当我运行 js shell 并调用 clear() 函数时,我遇到了分段错误。知道为什么会这样或我可以在哪里获得帮助吗?这发生在任何人身上吗?
$js
清除();
分段错误
$
javascript - 定义不能删除的属性?
如果我在使用 Spidermonkey 1.8 的 JSDB 1.8 中执行此操作:
我true
从delete x
anddelete w
线得到,但从false
and delete y
anddelete z
线得到delete v
。
这里发生了什么,这种行为是在 ECMAscript 标准中还是在 Spidermonkey 中定义的?我想从特定范围中删除一个函数,但发现我做不到。