2012-02-27 92 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