1

好吧,目前 chrome 有进程外的插件。和 Firefox 4 将使用相同的模型。

这意味着插件进程现在与浏览器进程分离。插件进程可能根本没有窗口。

我的插件基于NSView.

在 cocoa 事件模型之前,当我可以NSWindow在浏览器进程中访问时,我所要做的只是将 my_view 添加为窗口中 contentView 的子视图。

[[the_window contentView] addSubview:my_view] 

我不需要自己处理事件。它自己工作。

但现在,我转换NPCocoaEventsNSEvents事件处理代码。

我必须自己更改吗?

还有一些实例NSEvents,我无法制作它们,例如滚轮鼠标事件。

我该怎么办?

我走错路了吗?

请赐教。

4

2 回答 2

2

我必须自己更改吗?

如果您打算使用将 NSEvents 转发到现有 NSView 的方法,那么可以;无法访问原始的 NSEvents。它们在插件进程中不存在。

另一种选择是不再尝试使用本机控件,而是自己进行绘图和事件处理。这是大多数 NPAPI 插件的工作方式。

第三种可能性是为您的插件内容打开一个单独的窗口,并将您的视图放在该窗口中。这在技术上不受 NPAPI 的支持,而且它并不完美,但它可能是在您探索长期选项时让您的插件工作的短期方法。

我走错路了吗?

是的,您之前所做的是不受支持的 hack,而不是 NPAPI 的使用方式。将视图添加到浏览器的窗口假定浏览器的视图层次结构是实现细节,并且随时可能更改。

于 2010-11-18T14:36:45.833 回答
1

一种选择是使用FireBreath框架来创建你的插件,因为它已经有很多用于协商事件和绘图模型的抽象以及事件抽象。起床和走很简单。

于 2010-12-02T07:30:10.290 回答