2012-08-23 2 views
1

NPAPI으로 구현해야합니다. 키 이벤트에 대한 콜백 메커니즘입니다.비동기 NPAPI 플러그인을 구현하는 방법

문제 내가 직면하고있는 것은 threadcallasync을 구현하는 방법이며 자연스럽게 일반 NPAPI 플러그인에서 데이터를 자바 스크립트로 보냅니다. 유용한 링크 나 작업 코드가 도움이 될 것입니다. 나는 NPAPI 플러그인을 처음 접했습니다. threadcallasync 리눅스에서 구현해야하는 몇 가지 링크가 Windows에서 구현됩니다.

답변

2

FireBreath을 사용하여 플러그인을 만드는 것이 좋습니다. 그것은 당신을 위해 대부분의 어려운 것들을 해결할 것이고, how to do async calls에 자습서를 찾을 수 있습니다.

기본적으로 NPAPI에서 NPAPI가되는 javascript 함수를 전달해야하며, 작업이 완료되면 NPN_InvokeDefault를 콜백 NPObject에서 사용해야합니다. 물론 주 스레드에서이 작업을 수행해야합니다. 주 스레드로 메시지를 보내서 호출하도록 지시하는 방법이 필요합니다.

일반적으로 NPN_PluginThreadAsyncCall이이를 수행합니다. 당신은 함수 포인터와 void *를 여러분이 필요로하는 데이터와 함께 주면 그것은 메인 스레드에서 함수를 호출 할 것입니다. 불행히도 Safari 5.1은 Windows와 Mac 모두에서이 기능을 지원하지 않는 것 같습니다. Windows에서의 대안은 LPARAM의 불투명 포인터로 HWND 및 PostMessage 메시지를 작성하는 것입니다. Mac에서는 PerformSelectorOnMainThread 또는 NSTimer를 사용할 수 있습니다. 나는 리눅스에서 그렇게하는 방법을 모르겠다.

물론 FireBreath는 모든 것을 처리하고 모든 스레드에서 호출 할 수있는 JSObjectPtr에서 콜백을 래핑합니다 ... 호출하면 firebreath는 올바른 스레드에서 호출합니다. 그것은 또한 IE에서 작동합니다 ...하지만 그건 당신에게 달려 있습니다. 나는 FireBreath의 대부분을 썼고 조금 편향되어 있기 때문에 다른 옵션을 주려고했다.

행운을 (그냥 내가 편견이기 때문에 내가 틀렸다 의미하지 않는다)!

+0

택시 기사에게 감사드립니다. 난 일반 NPAPI를 사용해야 만한다. Firebreadth는 이미 비동기 호출을 구현했다. 일반 NPAPI에서는 특정 스레드를 호출하는 것과 같은 firebreadth와 비슷한 방식으로 JSObjectPtr에서 콜백을 마무리하는 방법을 설명합니다. 다시 한 번 감사드립니다. –