2009-12-26 6 views
5

이전 모질라 NPRuntime 예제를 기본으로 사용하여 작은 NPAPI 플러그인을 작성했습니다. 내 문제는 Firefox 및 Safari (Windows)에서 제대로 작동하지만 Google 크롬에서는 작동하지 않는다는 것입니다.Google 크롬에서 NPAPI 플러그인이 작동하지 않습니다.

about : plugins을 잘 볼 수 있으며, 테스트 페이지를 열면 Chrome이 플러그인 실행을위한 새로운 프로세스를 시작합니다. 플러그인 프로세스는 오류 대화 상자없이 ~ 10 초 만에 종료됩니다. 10 초 동안 프로세스가 살아 있으며 스크립팅 가능한 플러그인 객체가 작동하지 않습니다 (Firefox 또는 Safari를 사용할 때 잘 작동합니다).

어떤 아이디어로 인해 10 초 후에 Chrome에서 플러그인 프로세스가 중단 될 수 있습니까? 어떤 식 으로든 플러그인에 액세스하지 않더라도 초기화와 관련이 있어야합니다.

답변

15

특정 말하기는 어렵지만 동일한 프로세스에서 --plugin-startup-dialog 명령 줄 매개 변수를 사용하면 Chrome에서 플러그인을로드 할 때 경고 팝업을 표시 할 수 있습니다. 그런 다음 디버거를 해당 프로세스에 연결하고 잘하면 오류를 잡을 수 있습니다.

FireBreath은 Chrome에서 잘 작동하므로 초기화 코드의 주요 차이점을 확인할 수 있는지 비교하기 위해 비교할 수 있습니다. 디버거를 부착하는 것이 좋습니다 것이지만, 충돌이 발생할 때까지 코드를 단계별로 실행하십시오. 각 엔트리 포인트, NPP_New, NPP_Destroy 및 NPP_SetWindow에서 중단 점을 설정하고 어떤 일이 발생하는지 확인하십시오.

또 다른 옵션은 소스에서 Chromium을 빌드하는 것입니다 (엄청나게 어렵지는 않지만 시간이 많이 소요되지 않음). 그런 다음 작동을 멈추는 곳으로 전체 스택 추적을 얻을 수 있습니다.

행운을 빈다.

+2

또한 플러그 - 인 코드를 입력하지 않아도 윈도우에있을 경우 * depends.exe *로 크롬을 프로파일 링하면 유용한 힌트를 얻을 수 있습니다. –

+1

-plugin-startup-dialog를 사용하면 초기화 시퀀스를 디버그하고 문제를 찾을 수있었습니다. 고맙습니다! – eburger

+0

크롬에 문제가 있다면 문제가 무엇인지 더 자세히 말씀해 주시겠습니까? – Gui13

5

Taxilian의 팁 덕분에 초기화 시퀀스를 디버깅 할 수 있었고 Chrome이 플러그인의 NP_Initialize()를 호출 할 때 예제 플러그인이 오류를 반환하고있는 것으로 나타났습니다. 예제 플러그인은 플러그인의 합병에 사용 된 NPNetscapeFuncs 구조체 정의가 적어도 브라우저에서 제공하는 것과 동일한 크기인지 확인하는 검사를했습니다. Chrome은 npapi.h 및 npruntime.h를 얻은 최신 Mozilla XUL Runner SDK의 버전 22보다 자연스럽게 작은 버전 19 구조를 사용합니다.

관련 문제