プラグインから Javascript に配列を渡そうとしています。しかし、私はそれを行うことができません。与えられた解決策は、最初に Dom ウィンドウ オブジェクトを取得し、次に NPN_GetStringIdentifier("array") で NPN_Invoke を使用して関数を呼び出し、次に配列要素をプッシュするという同様の種類の他の投稿を参照しました。しかし、試してみると、NPN_Invoke でクラッシュしました。Dom の NPObject に「配列」に関連するメソッドがないためか、その他の理由でしょうか。
これが私のプラグイン コードです...(私の配列データは 0,1,2,...9 ループ内の i の値です)
bool ScriptableObject::method_process_getarray_intval(const NPVariant* args, uint32_t argCount, NPVariant* result)
{
printf("\n DATATYPE method_process_getarray_intval");
NPObject DomWin;
NPVariant Array;
NPError l_RetErr;
bool l_RetBool;
NPIdentifier l_NPId;
//Get the Window Object
l_RetErr = NPN_GetValue(m_npp,NPNVWindowNPObject,&DomWin);
if(l_RetErr == NPERR_NO_ERROR)
printf("\n \t Got the Dom Window Object");
else
printf("\n \t Error occured while getting the Dom Window Object");
//Get the Array by invoking DomWin using ARRAY method of browser
//Get string Identifier for Array
l_NPId = NPN_GetStringIdentifier("Array");
l_RetBool = NPN_Invoke(m_npp,&DomWin,l_NPId,NULL,0,&Array);
if(l_RetBool)
printf("\n \t Invoked for Array");
else
printf("\n \t Error while Invoking for Array");
//Fill the array elements using PUSH method of Array NPVariant
l_NPId = NPN_GetStringIdentifier("push");
for(int i = 0;i < 10; i++)
{
NPVariant *arg =(NPVariant *) g_browser->memalloc(sizeof(NPVariant));
INT32_TO_NPVARIANT(i,*arg);
NPVariant result;
l_RetBool= NPN_Invoke(m_npp,Array.value.objectValue,l_NPId,arg,1,&result);
if(l_RetBool)
printf("\n \t Invoked for Array i : %d",i);
else
printf("\n \t Error while Invoking for Array i :%d",i);
}
return true;
}
そして、私のhtmlページは次のようになります。これが正しいかどうかはわかりません。訂正等ありましたら教えてください...
<html>
<script type="text/javascript">
var inarray ;
function handleEvent(e) {
...
if (e.keyCode == 55)
{
document.getElementById('arrayint_ele_get').innerHTML = inarray;
process_getintarray(inarray);
}
}
</script>
<script type="text/javascript">
function process_getintarray(inarray)
{
if(obj)
{
obj.process_getarray_intval(inarray);
}
}
</script>
<body onload="init()" onkeydown="handleEvent(event)">
<div id="sq" style="width:50px;height:50px;position:relative;left:0px;border:1px solid #333333;background-color:#FF0000"></div>
......
<div style="position:absolute;left:100px;top:10px"> PLUGIN-SCRIPTS </div>
<div id ="arrayint_ele_get" style="position:absolute;left:100px;top:300px"> ARRAY_GETINT VAL </div>
.....
</body>
</html>
どんな提案も大歓迎です....