2009-09-16 6 views
3

Firefox 플러그인을 작성하는 방법을 배우려고합니다. Mozilla에서 npruntime 예제를 다운로드하여 컴파일했습니다. 플러그인에서 속성을 가져 오는 것이 좋았지 만 메서드를 호출하려고 시도했을 때 Firefox가 중단되었습니다. 아마도이 예제에서 뭔가 잘못되었다고 생각했기 때문에 하나의 속성과 문자열을 반환하는 하나의 메서드가있는 스크립트 가능한 기본 플러그인을 작성했습니다. 속성이 잘 작동했지만 메서드를 호출하면 Firefox가 다시 고정되었습니다.Firefox [npapi] 플러그인 개발 - 방법 호출시 firefox 동결

내가 누락 된 항목이 있습니까? 플러그인 디버깅을 시도했지만 다 잘된 것 같습니다. 모든 오른쪽 함수가 호출되고 값이 올바르게 반환됩니다. Firefox가 중지되는 동안 프로세스를 중지하려고하면 Windows 코드에서 멈추고 Firefox 코드에서는 중지되지 않습니다.

누군가가 올바른 방향으로 나를 가리킬 수 있다면 ...

감사합니다.

+1

예제 코드가 유용 할 것입니다. – sdwilsh

답변

6

해결 되었으면합니다. 이것이 사실이 아니라면, 나는 방금 그 예제 (저주받은 "npruntime 샘플"이라고 가정)에 결함이 있음을 발견했습니다.

문자열을 반환 할 때이 예에서는 함수 strdup을 사용하여 NP_something 메서드와 함께 전달 된 문자열을 할당했습니다. 사실 NPAPI가 그 지점부터 할당 된 문자열을 처리하고 strdupmalloc이 아니고 NPN_MemAlloc이 아니기 때문에이를 삭제하려고 시도 할 수 없습니다.

해결 방법은 NPAPI 기능에 전달하는 개체에 대해 malloc 또는 new를 사용하지 않는 것입니다.

char* src = "foo return val"; 
char* out = (char *)NPN_MemAlloc(strlen(src) + 1); 
strcpy(out, src); 
STRINGZ_TO_NPVARIANT(out, *result); 

을하고 일 :이 코드를 수정했습니다

STRINGZ_TO_NPVARIANT(strdup("default method return val"), *result); 

: 466

STRINGZ_TO_NPVARIANT(strdup("foo return val"), *result); 

라인 다음 npruntime 샘플 오류에 라인 (452)에있다. 하지만 샘플의 이러한 결함은 mozilla SDK 관리자가 수정해야한다고 생각합니다.

+1

좋은 찾기! 버그를 찾으십시오 - https://bugzilla.mozilla.org/enter_bug.cgi?product=Core&component=Plug-ins 그리고 사람들이 2 주 내에 반응하지 않으면 적합한 사람들을 찾으십시오. (예 : irc.mozilla.org/developers에서 주위를 물어보십시오)? – Nickolay

+0

안녕하세요, 감사합니다. 우리 개발자 중 한 명은 버그를 신고하고 수정 사항을 담은 패치를 작성했습니다. 지명 한 신용을 얻고 싶으면, 버그에서 떨어지고 당신의 이름을 진술하십시오. https://bugzilla.mozilla.org/show_bug.cgi?id=530138 – sdwilsh

0

모든 브라우저에 대해 npruntime을 개발했습니다. 모든 브라우저에서 잘 작동했지만 파이어 폭스는 Windows 7에서만 고정되었습니다.

Firefox의 "dom.ipc.plugins.enabled"편집 문제를 false로 해결했습니다. 그것이 효과가 있을지 모르지만 시도해 볼 가치가 있습니다.

관련 문제