【问题标题】:Scriptable Plugin, Javascript returns undefined可编写脚本的插件,Javascript 返回未定义
【发布时间】: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);

【问题讨论】:

    标签: plugins npapi scriptable


    【解决方案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);)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2020-06-28
    相关资源
    最近更新 更多