2010-11-18 12 views
1

Nun, Chrom hat derzeit keine Plugins. und Firefox 4 wird dasselbe Modell verwenden.Mac OSX, Cocoa-Ereignismodell in NPAPI, NSView und Out of Process-Plugins

Das bedeutet, Plugin-Prozess ist jetzt von Browser-Prozess getrennt. Plugin-Prozess möglicherweise kein Fenster überhaupt.

Mein Plugin basiert auf NSView.

Vor Kakao-Event-Modell, wenn ich auf NSWindow im Browser-Prozess zugreifen kann, alles, was ich tun muss, ist nur my_view als Unteransicht der ContentView im Fenster hinzufügen.

[[the_window contentView] addSubview:my_view] 

Ich brauche keine Ereignisse selbst zu verarbeiten. Es hat funktioniert.

Aber jetzt, ich konvertiere NPCocoaEvents in NSEvents in Event-Prozess-Code.

Muss ich es selbst ändern?

Auch einige Instanz von NSEvents, ich kann sie nicht zum Beispiel, Mausrad Ereignisse machen.

Was soll ich tun?

Bin ich falsch angelaufen?

Bitte erleuchten Sie mich.

Antwort

2

Muss ich es selbst ändern?

Wenn Sie den Ansatz der Weiterleitung von NSEvents zu Ihrem vorhandenen NSView verwenden möchten, dann ja; Es gibt keine Möglichkeit, auf die ursprünglichen NSEvents zuzugreifen. Sie sind nicht im Plugin-Prozess vorhanden.

Eine andere Option wäre, weg von Versuchen, native Steuerelemente zu verwenden, und Ihre eigene Zeichnung und Ereignisbehandlung zu tun. Auf diese Weise arbeiten die meisten NPAPI-Plugins.

Eine dritte Möglichkeit wäre, ein separates Fenster für Ihren Plugin-Inhalt zu öffnen und Ihre Ansicht in dieses Fenster zu stellen. Dies wird von NPAPI technisch nicht unterstützt, und es wird nicht perfekt sein, aber es könnte ein kurzfristiger Weg sein, um Ihr Plugin zum Laufen zu bringen, während Sie langfristige Optionen erkunden.

Habe ich einen falschen Weg gewählt?

Ja, was Sie bisher gemacht haben, war ein nicht unterstützter Hack, und nicht, wie NPAPI verwendet werden sollte. Das Hinzufügen einer Ansicht zu einem Browserfenster nimmt Dinge in Bezug auf die Ansichtshierarchie des Browsers an, bei denen es sich um Implementierungsdetails handelt und die jederzeit geändert werden können.

+0

Danke für Ihre Antwort. Es ist ein guter Rat. –

1

Eine Option wäre, das FireBreath Framework zu verwenden, um Ihr Plugin zu erstellen, da es bereits eine Menge Abstraktion für die Aushandlung der Ereignis- und Zeichnungsmodelle sowie eine Ereignisabstraktion hat. Es ist ziemlich einfach, aufzustehen und zu gehen.