2010-11-18 36 views
1

那麼,目前chrome已經沒有進程插件。而firefox 4將使用相同的型號。Mac OSX,NPAPI,NSView和進程插件中的Cocoa事件模型

這意味着插件進程現在是從瀏覽器進程中分離出來的。 插件進程可能根本沒有窗口。我的插件基於NSView

在可可事件模型之前,當我可以在瀏覽器進程中訪問NSWindow時,我只需要在窗口中添加my_view作爲contentView的子視圖。

[[the_window contentView] addSubview:my_view] 

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

但是現在,我在事件處理代碼中將NPCocoaEvents轉換爲NSEvents

我必須自己改變它嗎?

還有一些NSEvents的實例,我不能讓它們成爲例如滾輪鼠標事件。

我該怎麼做?

我的方法錯了嗎?

請賜教。

回答

2

我必須自己改變它嗎?

如果您打算使用將NSEvents轉發到現有NSView的方法,那麼是;沒有辦法訪問原始的NSEvents。它們不存在於插件過程中。

另一種選擇是擺脫嘗試使用本機控件,並做自己的繪圖和事件處理。這是大多數NPAPI插件的工作方式。

第三種可能性是爲您的插件內容打開一個單獨的窗口,並將您的視圖放在該窗口中。這在NPAPI技術上並沒有得到支持,它不會是完美的,但它可能是一個短期的方式讓你的插件工作,而你探索長期的選擇。

我的方法錯了嗎?

是的,你之前做的事情是不受支持的破解,而不是NPAPI如何使用。向瀏覽器窗口添加視圖假定瀏覽器的視圖層次結構是實現細節,並隨時可能更改。

+0

感謝您的回答。 這是一個很好的建議。 – 2010-11-19 01:07:18

1

一個選擇是使用FireBreath框架來創建您的插件,因爲它已經有很多抽象協議事件和繪圖模型以及事件抽象。起牀和離開都很簡單。