2010-11-18 3 views
1

글쎄, 현재 크롬에는 프로세스 외부 플러그인이 있습니다. firefox 4는 동일한 모델을 사용합니다.Mac OSX, NPAPI, NSView 및 Out of process 플러그인의 코코아 이벤트 모델

즉, 플러그인 프로세스가 브라우저 프로세스에서 분리되었음을 의미합니다. 플러그인 프로세스에 창이 전혀 없을 수도 있습니다.

내 플러그인은 NSView을 기반으로합니다.

코코아 이벤트 모델을 사용하기 전에 브라우저 프로세스에서 NSWindow에 액세스 할 수 있으면 my_view를 창에있는 contentView의 하위보기로 추가하기 만하면됩니다.

[[the_window contentView] addSubview:my_view] 

직접 이벤트를 처리 할 필요가 없습니다. 그것은 그 자체로 효과가있었습니다.

하지만 이제 이벤트 프로세스 코드에서 NPCocoaEventsNSEvents으로 변환합니다.

직접 변경해야합니까?

또한 NSEvents의 일부 인스턴스, 나는 그들을 휠 마우스 이벤트와 같이 만들 수 없습니다.

어떻게해야합니까?

잘못된 방식으로 접근 했습니까?

저를 계몽하십시오.

답변

2

직접 변경해야합니까?

NSEvents를 기존 NSView로 전달하는 방법을 사용하려는 경우 예; 원래 NSEvents에 액세스 할 수있는 방법이 없습니다. 그들은 플러그인 프로세스에 존재하지 않습니다.

또 다른 옵션은 네이티브 컨트롤을 사용하려는 시도에서 벗어나 자신의 그리기 및 이벤트 처리를 수행하는 것입니다. 이것은 대부분의 NPAPI 플러그인이 작동하는 방식입니다.

세 번째 가능성은 플러그인 콘텐츠에 대해 별도의 창을 열고 해당 창에보기를 배치하는 것입니다. 이것은 NPAPI에서 기술적으로 지원하지 않으며 완벽하지는 않지만 장기적인 옵션을 탐색하는 동안 플러그인을 작동시키는 것은 단기적인 방법 일 수 있습니다.

잘못된 방식으로 접근 했습니까?

예, NPAPI의 사용 방법이 아닌 이전에 수행했던 작업은 지원되지 않는 해킹이었습니다. 브라우저 창에보기를 추가하면 구현 세부 사항이며 언제든지 변경 될 수있는 브라우저의보기 계층 구조에 대한 사항을 가정합니다.

+0

답변 해 주셔서 감사합니다. 큰 도움이됩니다. –

1

하나의 옵션은 이미 이벤트 및 드로잉 모델과 이벤트 추상화 협상을위한 많은 추상화가 있으므로 FireBreath 프레임 워크를 사용하여 플러그인을 만드는 것입니다. 일어나고가는 것은 꽤 간단합니다.