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의 대부분을 썼고 조금 편향되어 있기 때문에 다른 옵션을 주려고했다.
는
행운을 (그냥 내가 편견이기 때문에 내가 틀렸다 의미하지 않는다)!
택시 기사에게 감사드립니다. 난 일반 NPAPI를 사용해야 만한다. Firebreadth는 이미 비동기 호출을 구현했다. 일반 NPAPI에서는 특정 스레드를 호출하는 것과 같은 firebreadth와 비슷한 방식으로 JSObjectPtr에서 콜백을 마무리하는 방법을 설명합니다. 다시 한 번 감사드립니다. –