2012-02-27 38 views
0

我開發了一個可編寫腳本的NPAPI插件。當我嘗試在Chrome/Firefox中加載單個實例時,我沒有任何問題可以反饋給網頁(網頁A)及其javascript。但是,一旦我用嵌入式插件打開了一個新頁面(網頁B),它想要與網頁A而不是網頁B進行通信。我如何區分這兩者?NPAPI多個實例衝突

難道這是因爲入口點已被設置並需要重置爲正確的實例嗎?

謝謝

回答

1

入口點不會影響你在說什麼;很可能你沒有正確跟蹤核電廠實例,或者你有其他不應該是全球性的東西。

基本入口點不是實例特定的;如果您查看NPP_ *函數,那麼特定於某個實例的所有函數都將以「NPP」作爲第一個參數;通常你會在NPP的pdata字段中保留一個指向某種數據結構的指針,這就是你應該用來區分不同實例的東西。如果你沒有正確地做到這一點,或者如果你在其他地方存儲全局或靜態變量,應該是特定於實例的,這些都可能導致你描述的問題。

你可能要考慮使用FireBreathNixysa;第一個將NPAPI的大部分痛苦抽象出來並給你IE支持,第二個可以爲你生成骨架w/API,這樣你就可以填充其他代碼,並且從已經有效的東西開始。

關於核電站的結構是如何工作的,你的不同實例之間如何區分可以在http://npapi.com/tutorial2

+1

找到我做存儲NPP實例的指針時NPP_New被調用的全局結構的進一步信息。所以當我打電話給NPN_函數時,我會得到指針。 – hapyfishrmn 2012-03-02 19:43:36

+0

好吧,那就是你的問題。你有它倒退;您不會將NPP存儲在任何位置,因爲這是實例標識符。任何你需要調用NPN_函數的地方都應該是某個特定的實例;我通常創建一個類並在NPP中存儲一個指向它的指針,以便稍後使用它,並將該npp存儲在該類中。確保你釋放NPP_Destroy中的類 – taxilian 2012-03-02 19:48:17

+0

我明白你何時調用NPP_函數,因爲你可以查看實例 - > pdata。當你有一個腳本對象(NPObject的類)時,我沒有看到你有如何指向實例的指針。 JavaScript調用Invoke()並調用使用NPN_的函數,你從哪裏得到NPP? – hapyfishrmn 2012-03-02 22:04:56