前もって感謝します !!!!!
var pluginObject = null;
function init()
{
var pluginObject = document.getElementById('pluginObj'); //This is object for my Plugin.
pluginObject.onstartevent = handleEvent(); // This is working
//now i am calling one function in plugin that will return NPObject using invoke default
pluginObject.startEvent(function(e) {
e.onstartEvent = handleEvent(); //This is not working ......how to make it work
});
}
function handleEvent(e)
{
if(e)
{
alert(e);
}
}
<body onload = "init()" > </body>
ここでは、本体から init 関数を呼び出し、プラグイン オブジェクトを作成してから、プラグイン内で処理している onstartEvent プロパティを呼び出しています。問題は、「e.onstartEvent」でこのオブジェクトをどのようにキャプチャしてここで呼び出すかです。私はそれを取得していません。PluginObject の場合、NPNVPlUGINOBJECT を使用し、存在する場合はプロパティ「onstartEvent」をチェックしてから、has メソッドをチェックし、最後に PLUGIN オブジェクトを呼び出します。
//私のプラグインコードは次のとおりです:
bool ScriptablePluginObject::Invoke(NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result)
{
char *pFunc = NPN_UTF8FromIdentifier(name);
if(!strcmp("startEvent",pFunc))
{
NPObject * argsVal = args[0].value.objectValue;
NPVariant valueToSend;
NPVariant returnValue;
valueToSend.type = NPVariantType_Object;
valueToSend.value.objectValue = this;
NPN_InvokeDefault(mNpp,argsVal,&valueToSend,1,&returnValue);
return true;
}
return false;
}
HasProperty で、「onstartEvent」という名前の現在のクラス プロパティをチェックインします。
bool ScriptablePluginObject::HasProperty(NPIdentifier name)
{
char *pProp = NPN_UTF8FromIdentifier(name);
//Check which Properties are available
if( !strcmp( "onstartEvent", pProp ) )
{
return true;
}
return false;
}
GetProperty で、最終的に整数値をチェックして //handleEvent 関数に返します。
bool ScriptablePluginObject::GetProperty(NPIdentifier name, NPVariant *result)
{
VOID_TO_NPVARIANT(*result);
char *pProp = NPN_UTF8FromIdentifier(name);
//onstartEvent
if(!strcmp("onstartEvent", pProp))
{
//Calling e.onstartEvent will come here in GetProperty
NPObject * pluginObj = NULL;
NPN_GetValue(mNpp,NPNVPluginElementNPObject,&pluginObj);
NPIdentifier id = NPN_GetStringIdentifier("onstartEvent");
bool val = NPN_HasMethod(mNpp,pluginObj,id);
NPVariant value;
NPVariant retVal;
value.type = NPVariantType_Int32; //now returning some value if val is true.
value.value.intValue = 20;
if(val==true)
{
//Finally returning value to the handle Event function in JavaScript
NPN_Invoke(mNpp,pluginObj,id,&value,1,&retVal);
}
return true;
}
return true;
}