将整数数组从插件传递到JavaScript
Passing integer array from Plugin to JavaScript
我正试图将一个数组从插件传递到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>
欢迎提出任何建议。。。。
根据您提供的信息,我猜您的NPNFuncs函数指针设置不正确(因此您调用了一个坏函数),或者您的m_npp已损坏。当然,如果是这两种情况中的任何一种,我认为请求DOMWindow对象也会失败。
我可能需要更多的代码来推测;你可能想考虑使用FireBreath或nixysa,而不是自己做所有事情;它会让你专注于你的实际插件,而不是处理NPAPI。只是一个想法。
下一个想法是,NPN_Invoke调用g_browser->Invoke吗因为你提到你正在检查hasmethod,但后来你转过身来调用NPN_hasmethod;如果这一切都没有正确连接,肯定会引发这样的问题。
归根结底,在某个地方,你的一个指针偏离了;可能性有:
- NPN_Invoke和NPN_HasMethod没有在g_browser上调用正确的方法
- g_browser(您的NPNFuncs结构)没有有效的函数指针
- 您的npp无效(未正确保存等)
我看不出它怎么会是其他的东西。
相关文章:
- 无法使用javascript插件在首次运行时加载实际图像大小(图像在刷新后加载)
- 用于突出显示文本的JQuery/JavaScript插件
- UMD支持贯穿我们的JavaScript插件意味着
- Javascript插件在Wordpress中附加重复数据
- Noty 中的 JavaScript 插件会给出错误
- Sonar Javascript插件错误:“无法装饰”和“在其源文件夹中不包含任何文件”
- 使用谷歌表单javascript插件而不向公众发布
- wordpress和javascript插件的兼容性
- 正在寻找支持线条绘制的SVG Map Javascript插件
- JavaScript插件对函数复杂性和函数长度的误报
- 使用JsInterop包装简单的JavaScript插件
- Javascript插件不应该影响所有的选择框
- 在按下按钮时启用 JavaScript 插件
- 安装 JavaScript 插件
- 根据窗口大小禁用JavaScript插件
- Jquery / Javascript插件,用于浏览器内数据分析和图表
- JavaScript 插件设置优化
- 如何将一个事件绑定两次到 JavaScript 插件
- Javascript插件未加载
- intelliJ的默认JavaScript插件在哪里