嗯,目前chrome有进程外插件。而Firefox4将使用相同的模型。
这意味着插件进程现在从浏览器进程中分离出来了。插件进程可能根本没有窗口。
我的插件是基于NSView的。
在cocoa事件模型之前,当我可以在浏览器进程中访问NSWindow时,我所要做的就是将my_view作为contentView的子视图添加到窗口中。
[[the_window contentView] addSubview:my_view] 我不需要自己处理事件。它自己起作用了。
但是现在,我在事件处理代码中将NPCocoaEvents转换为NSEvents。
我必须自己改吗?
还有一些NSEvents的实例,我不能让他们,例如,滚轮鼠标事件。
我该怎么做?
我是不是走错路了?
请给我开导一下。
发布于 2010-11-18 22:36:46
我必须自己更改它吗?
如果您计划使用将NSEvents转发到现有NSView的方法,那么可以;没有办法访问原始NSEvents。它们并不存在于插件进程中。
另一种选择是不再尝试使用本机控件,而是使用自己的绘图和事件处理。这是大多数NPAPI插件的工作方式。
第三种可能是为您的插件内容打开一个单独的窗口,并将您的视图放在该窗口中。这在技术上不受NPAPI的支持,它也不会是完美的,但它可能是一种短期的方法,可以让您的插件工作,同时探索长期的选择。
我是不是走错路了?
是的,您之前所做的是一个不受支持的黑客攻击,而不是如何使用NPAPI。将视图添加到浏览器窗口会假定浏览器的视图层次结构是实现细节,并且随时可能发生更改。
发布于 2010-12-02 15:30:10
一种选择是使用FireBreath框架来创建您的插件,因为它已经有很多用于协商事件和绘制模型的抽象以及事件抽象。这是相当简单的起身和前进。
https://stackoverflow.com/questions/4211950
复制相似问题