2012-10-18 4 views
2

JS에서 NPAPI 플러그인의 리스너를 등록하고 있습니다. 동일한 청취자를 여러 번 등록하지 않으려면 전달 된 NPVariant 객체를 이미 목록에있는 객체와 비교하는 방법이 필요합니다. 다음NPVariant 개체를 비교하는 방법은 무엇입니까?

PluginObject.registerListener("event", listener); 

및 플러그인 소스 : 다음 NPVariant 그냥 NPObject입니다

for (l=head; l!=NULL; l=l->next) { 
     // somehow compare the listeners 
     // l->listener holds NPVariant object 
     if (l->listener-> ??? == new_lle->listener-> ???) 
     { 
     found = 1; 
     DBG("listener is a duplicate, not adding."); 
     NPN_MemFree(new_lle->listener); 
     free(new_lle); 
     break; 
     } 
    } 

답변

0

당신이 자바 스크립트 함수에 대해 얘기하고 내가 JS에서 청취자를 등록하고있어 어떻게

이입니다 .

typedef struct _NPVariant { 
    NPVariantType type; 
    union { 
    bool boolValue; 
    int32_t intValue; 
    double_t doubleValue; 
    NPString stringValue; 
    NPObject *objectValue; 
    } value; 
} NPVariant; 

은 val.type과 val.objectValue를 비교합니다. 이것은 일반적으로 효과가 있지만 그렇지 않은 경우 다른 방법이 없으므로 시도하는 것이 좋습니다. 다른 가능성은 자바 스크립트 함수를 만들어 비교하고, NPN_Evaluate로 주입하고, 두 개체로 호출하는 것입니다.

0

나는 당신이 objectValue에 의지 할 수 있다고 생각하지 않습니다. 예를 들어 다음을 수행하는 경우 :

foo={}; bar=foo; x={};
x.f=foo; x.b=bar;

을 지금, 당신은 NPN_Enumerate를 호출하고 NPObject 같은 x를 전달하는 경우, 당신은이 식별자를 얻을. 이들 각각에 대해 GetProperty를 호출하면 NPVariants가 반환되지만 variant->value.objectValue 값은 각각 다르며 이후의 NPN_Enumerate 호출에서도 달라집니다.

taxilian : 동등성을 테스트하기 위해 두 개의 NPObject를 사용하여 NPN_Invoke을 호출 할 때 상당한 오버 헤드가 있습니까? 이것은 또한 GetProperty에 대한 호출과 식별자 생성과 NPVARIANT 매크로를 호출하여 결과 등을 테스트합니다. Javascript에서 얼마나 많은 로직을 주입하고 평가해야하는지 궁금합니다.이 코드 삽입은 다음과 같이 나타납니다. 해결책을 반복해서. 비용이 많이 드는가?