可编写脚本的插件,Javascript 返回未定义

Posted

技术标签:

【中文标题】可编写脚本的插件,Javascript 返回未定义【英文标题】:Scriptable Plugin, Javascript returns undefined 【发布时间】:2011-12-28 15:16:19 【问题描述】:

我正在尝试编写一个可写的插件,我使用下面的 mozilla 示例作为我的指南,并查看 firebreath 以了解它是如何包装代码的。我被困在 javascript 的返回值上。

Mozilla scriptable example

当 javascript 调用我的函数时,Allocate、HasProperty、HasMethod、Invoke 都会被调用。我在 Invoke 中返回结果,并且 javascript 变量是 undefined 或在修改结果时导致浏览器崩溃。

    STRINGZ_TO_NPVARIANT(_strdup("Hello World"), *result);

【问题讨论】:

【参考方案1】:

STRINGZ_TO_NPVARIANT 其实有点危险;当您将字符串放入 NPVariant 对象时,您将该内存的所有权授予浏览器。但是,如果您没有使用 NPN_MemAlloc 分配该内存,则当它尝试释放该内存时可能会发生爆炸(可能是您崩溃的根源)。

看看 STRINGZ_TO_NPVARIANT 实际在做什么,不要使用它,直到你了解它是如何工作的;在此之前,您可以尝试手动执行这些步骤,以便更好地理解。使用 NPN_MemAlloc 分配内存,然后将您的字符串 strcpy 分配给它。我敢打赌这可以解决您的问题;在你弄清楚构建你自己的内联函数或其他什么之后再次清理代码。

【讨论】:

感谢您的回复,我已经查看了宏,我看不出宏的执行方式有什么问题。但是在阅读这里之后:link[/link] 和你的 cmets 我没有使用 NPN_MemAlloc 并将数据复制到一个临时字符串中。 (temp = NPN_MemAlloc(strlen("Hello World")); memcpy(temp, "Hello World", strlen("Hello World")); STRINGZ_TO_NPVARIANT(temp, *result);)

以上是关于可编写脚本的插件,Javascript 返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何从统一自定义编辑器中的可编写脚本对象数组中获取值?

javascript 从Slack导入联系人的可编写脚本的脚本。现有联系人还将更新其头像和社交个人资料。联系人

Javascript元素数组innerHTML返回未定义

Silverlight 数据绑定无法从可编写脚本的成员中工作

Chrome 扩展 javascript 功能未定义

在可编写脚本的对象UNITY 5中存储方法