2017-01-03 12 views
0

Firefox에서 작동하는 NPAPI 플러그인을 구현했습니다. 다음으로, JavaScript 측의 함수를 콜백으로 받아들이는 메소드를 추가하려고 시도했습니다.NPAPI 플러그인에서 POCO 타이머를 사용할 수 없습니다.

처음에는 같은 방법으로 즉시이 콜백 메소드를 호출하려고했으나 JavaScript 측에서 아무 것도하지 않았습니다.

그런 다음 Poco :: Util :: Timer 및 TimerTask를 사용하여 타이머를 구현하려고했습니다. 코드에서 Timer 또는 TimerTask를 인스턴스화 할 때 Firefox는 더 이상 플러그인을로드하지 않습니다. about : plugins에는 플러그인의 흔적이 없습니다.

내 지식으로는 플러그인이로드되지 않는 이유를 알아낼 방법이 없으며 NPAPI 플러그인을 구현할 때 허용되지 않는 플러그인에 대한 참조를 찾지 못했습니다.

모든 포인터가 가장 유용 할 것입니다. 필요한 경우 코드를 게시 할 수 있습니다.

+0

NPAPI에 대한 지원이 다음 달에 출시 될 Firefox에서 제거된다는 것을 알고 계십니까? – taxilian

+0

네, NPAPI를 선택한 유일한 이유는 PPAPI를 먼저 살펴 봤기 때문에 직접적으로 메소드를 호출하고 플러그인의 속성을 읽는 것이 필요한 한 가지를 할 수 없기 때문입니다. 이것은 상용 프로젝트 (NPAPI 기반 플러그인을 사용하여 독점 플랫폼에서 실행되는 JavaScript 앱을 테스트 및 검증 함)를위한 것이므로 선택의 여지가 거의 없습니다. – MayaPosch

+0

PPAPI는 플러그인을 활성화하는 특수 명령 행 플래그 없이는 사용할 수 없습니다 ... NPAPI를 대체하는 것이 아닙니다. – taxilian

답변

1

NPAPI 플러그인에 대해 알아야 할 주요한 점은 어떤 식 으로든 대체 스레드에서 브라우저 과 상호 작용할 수 없다는 것입니다.

그러나 먼저 InvokeDefault를 사용하여 전달 된 NPObject를 호출하면 작업을 수행 했으므로 첫 번째 테스트로 되돌아갑니다.

내 생각에 타이머를 사용하면 아마도 다른 스레드에서 실행 중이거나 플러그인 스레드에서 메시지 루프를 빼앗 으려고하는 것입니다. 둘 다 문제를 일으킬 수 있습니다. FireBreath 보셨습니까? FireBreath 1은 NPAPI의 모든 구현 세부 사항을 알 필요없이 필요한 모든 것을 제공합니다.

+0

Firebreath를 보았지만 프로젝트가 더 이상 유지되지 않는다고 확신하지 못했습니다. Poco Timer가 플러그인 메시지 루프로 훌륭하게 재생되지 않는 것은 맞습니다. 나는 원래의 코드를 (기본 메소드를 즉각 호출하는) 또 다른 시도를 할 것이지만, 디버깅하기가 매우 어려운 플러그인을 찾는다. – MayaPosch

+0

유지 관리 대상은 상대적 용어입니다. 아무도 기여할 필요성을 느끼지 못하고 큰 버그가 없기 때문에 적극적인 개발은별로 없지만 저자 (나)는 여전히 주위에 있습니다. – taxilian

+0

도움을 주셔서 감사합니다. 콜백을받은 메소드에서 직접 콜백으로 돌아가서 이전에 작동하지 않는 이유는 JavaScript 오류 (JSON.stringify() 인스턴스 때문입니다. 다른 하나에 임베드 됨). – MayaPosch