2011-12-28 31 views
0

我試圖編寫一個scritable插件,我使用mozilla的例子作爲我的指南,以及看firebreath看它如何包裝代碼。我陷入了JavaScript的返回值。腳本插件,Javascript返回undefined

Mozilla scriptable example

當JavaScript調用我的功能分配,HasProperty,HasMethod,調用所有被調用。我返回Invoke中的結果,並且在修改結果時,javascript變量是undefined或崩潰瀏覽器。

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

回答

1

STRINGZ_TO_NPVARIANT實際上有點危險;當你將一個字符串放入一個NPVariant對象時,你將該內存的所有權交給瀏覽器。但是,如果您沒有使用NPN_MemAlloc分配該內存,那麼當它嘗試釋放該內存時(可能是崩潰的來源),可能會發生爆炸。

看看STRINGZ_TO_NPVARIANT實際上在做什麼,不要使用它,直到你明白它是如何工作的;在此之前,您可以嘗試手動執行這些步驟,以便更好地理解。使用NPN_MemAlloc分配內存,然後將字符串strcpy分配給它。我敢打賭,這可以解決你的問題;在你知道了之後就想出了構建你自己的內聯函數或者不需要再次清理代碼的東西。

+0

感謝您的迴應,我已經看過宏,我沒有看到有問題的宏是如何做錯的。但在閱讀這裏後:[鏈接](http://colonelpanic.net/2009/12/memory-management-in-npapi/)[/鏈接]和您的意見我沒有使用NPN_MemAlloc並將數據複製到一個臨時字符串。 '(TEMP = NPN_MemAlloc(strlen的(的 「Hello World」)); 的memcpy(溫度, 的 「Hello World」, 的strlen(的 「Hello World」)); STRINGZ_TO_NPVARIANT(溫度, *結果);)' – hapyfishrmn 2012-01-04 14:26:35