2012-10-23 4 views
2

NPAPI 플러그인을 만들고 자바 스크립트에서 플러그인의 배열 요소에 액세스하려고합니다. 내가 사용하는 자바 스크립트는 다음 중 하나입니다 : NPClass에있는 모든 방법을 위의 코드를 배열 요소에 액세스하기 위해 호출됩니다 무엇자바 스크립트에서 NPAPI 플러그인의 배열 요소에 액세스

var foo_plug = document.getElementById('foo'); 
var elem = foo_plug.array_p[index]; 
  1. ?
  2. NPAPI 플러그인의 배열 색인에서 값을 어떻게 반환합니까?
  3. 배열 인덱스가 Javascript에서 NPAPI 플러그인으로 전달되는 방식은 무엇입니까?

추신 : 플러그인의 변수에 액세스 할 때 NPClass의 hasProperty 및 getProperty 메소드가 호출되어 정상적으로 작동합니다.

답변

1

이해해야 할 첫 번째 사항은 호출 체인입니다. 의 질문에 라인을 살펴 보자 :

var elem = foo_plug.array_p[index]; 

를 이것이 할 것입니다 것은 문자열 "array_p"로 변환하는 NPIdentifier와 foo_plug에 대한 NPObject에 첫 번째 통화의 NPN_GetProperty입니다.

다음에 수행 할 작업은 반환되는 내용에 따라 다릅니다. 문자열을 반환하면 index는 해당 문자열에 대한 인덱스가됩니다. int 인 경우 오류가 발생합니다. 반면 NPObject 인 경우 다음 호출은 IntIdentifier (NPN_GetIntIdentifier 사용) 또는 숫자를 문자열로 사용하는 NPIdentifier (해당 NPObject를 결정하기 위해 NPN_IdentifierIsString 사용)가있는 해당 NPObject에 대해 NPN_GetProperty가됩니다. .

반환 된 NPObject가 실제 자바 스크립트 배열 인 경우 이제 걱정할 필요가 없습니다. 윈도우의 NPObject를 가져 와서 식별자 "Array"및 인수가없는 Invoke를 호출하면 빈 배열이있는 NPObject가 반환됩니다. 당신은 그것에 물건을 넣고 그것을 돌려주고 잘 작동합니다.

"length"속성 인 NPN_Enumerate를 지원하는 NPObject를 반환 할 수 있으며 숫자 문자열 식별자 또는 intidentifier를 지능적으로 처리 할 수 ​​있습니다 (실제로 일부 브라우저는 각 유형을 사용하기 때문에 둘 다 처리해야 함). javascript 배열처럼 행동하면 차이를 알 수 없을 것입니다.

FireBreath은 이러한 모든 옵션을 훌륭하게 지원합니다.

+1

감사합니다. NPObject 반환은 나를 위해 일했습니다. – krishnanunni