可编写脚本的插件,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导入联系人的可编写脚本的脚本。现有联系人还将更新其头像和社交个人资料。联系人