2012-07-15 7 views
0

得到相關的NPP實例,因爲我的插件需要JavaScript代碼相同的頁面上的其他插件交互:obj1.invokeWith(OBJ2)如何從NPObject

在這種方法中,OBJ2的NPObject對象傳遞到obj1。如何在obj1的方法中從此NPObject獲取obj2的NPP實例?

+0

你想實現什麼?爲什麼不能跟蹤實例在JS?請記住,「obj2」的(C++)實例可能不在同一個進程中。 – 2012-07-15 15:47:28

回答

1

簡答:你不能。

較長的回答實際上可以幫助你做你想做的事,雖然以不同的方式是什麼:

你不能得到任何「認可」方式的信息。你或許可以找到某種方式將數據作爲無效數據通過屏障傳遞並將其解除引用,但這是一個非常糟糕的想法,IMO。

如果您試圖訪問您自己的插件的另一個實例中的數據,那麼只需使用全局的std :: map(或類似的東西),並有一個NPObject方法,該方法爲您提供了訪問正確的的std ::地圖。當我這樣做時,我只是使用一個全局/靜態int並增加它爲每個實例提供一個唯一的ID,然後在NPObject上有一個屬性或方法可以從另一個返回該ID的NPObject調用。你拿着身份證,在地圖上查找實例,然後離開你。

許多現代瀏覽器實際上會將NPObject包裝在其他東西中,即使它傳遞給插件的另一個實例,因此您無法從獲得的NPObject中獲取原始NPObject,只能對其進行NPRuntime調用。我們曾經可以用FireBreath做到這一點,但它不再適用於不同的實例。

相關問題