2012-02-27 3 views
0

스크립트 가능한 NPAPI 플러그인을 개발했습니다. Chrome/Firefox에서 단일 인스턴스를로드하려고하면 웹 페이지 (웹 페이지 A)와 해당 자바 스크립트로 다시 통신하는 데 문제가 없습니다. 그러나 삽입 된 플러그인을 사용하여 새 페이지 (웹 페이지 B)를 열면 웹 페이지 B가 아닌 웹 페이지 A와 통신하려고합니다. 둘을 어떻게 구별합니까?NPAPI 여러 인스턴스가 충돌 함

Entrypoints에 알리미가 설정되어 있고 올바른 인스턴스로 재설정해야 할 필요가있을 수 있습니까?

감사합니다.

답변

1

엔트리 포인트는 당신이 말하는 것에 영향을 미치지 않습니다. 대부분 NPP 인스턴스를 올바르게 추적하지 못하거나 그렇지 않아야하는 전역 적 항목이있을 가능성이 큽니다.

기본 진입 점은 특정 인스턴스가 아닙니다. NPP_ * 함수를 보면 인스턴스에 고유 한 모든 함수가 첫 번째 매개 변수로 "NPP"를 사용합니다. 일반적으로 NPP의 pdata 필드에 일종의 데이터 구조에 대한 포인터를 보관할 것이고 이는 다른 인스턴스를 구별하기 위해 사용해야합니다. 올바르게 수행하지 않거나 특정 인스턴스에 대해 전역 변수 또는 정적 변수를 저장하고있는 경우에는 사용자가 설명하는 문제가 발생할 수 있습니다.

FireBreath 또는 Nixysa을 사용하는 것이 좋습니다. 첫 번째는 NPAPI의 고통의 대부분을 추상화하고 IE 지원을 제공하며 두 번째는 API가 포함 된 스켈레톤을 생성하여 다른 코드를 채우고 이미 작동하는 것으로 시작합니다. 원전 구조가 작동하고 다른 인스턴스를 구별 어떻게 NPP_New이 글로벌 구조에서 호출 될 때 NPP 인스턴스 포인터를 저장 할 http://npapi.com/tutorial2

+1

에서 찾을 수 있습니다 방법에 대한

추가 정보. 따라서 NPN_ 함수를 호출 할 때 포인터가 생깁니다. – hapyfishrmn

+0

음, 바로 거기에 문제가 있습니다. 당신은 거꾸로 가지고 있습니다. NPP는 인스턴스 식별자이므로 아무 곳에 나 저장하지 마십시오. 어디에서나 NPN_ 함수를 호출해야하는 것은 인스턴스에 특정한 것입니다. 보통 클래스를 만들고 NPP에 포인터를 저장하여 나중에 사용할 수있게하고 해당 클래스 안에 npp를 저장합니다. NPP_Destroy 클래스를 해제했는지 확인하십시오. – taxilian

+0

호출 - NPP_가 작동하는 시점을 이해합니다. 인스턴스 -> pdata를 볼 수 있기 때문입니다. 당신이 스크립트 가능한 객체 (NPObject의 클래스)를 가지고있을 때 나는 당신이 어떻게 그 인스턴스에 대한 포인터를 가지고 있는지 보지 못했다. Javascript는 Invoke()를 호출하고 NPN_을 사용하는 함수를 호출 할 때 NPP를 어디에서 가져 옵니까? – hapyfishrmn