火狐谷歌插件开发过程

没接触火狐插件开发之前,不由自主就觉得这是个令人兴奋和头痛的开发,事实过程还算不是很坎坷,只是有几个问题头痛了小一会儿,现我将这次的开发过程结合网上的资料,整理出一个比较完整、实用的火狐插件开发文档。

一.火狐插件:

1.前期准备工作:

(1)下载Gecko SDK.。链接地址为:https://developer.mozilla.org/en/gecko_sdk,注意你火狐的版本不能低于Gecko SDK的版本。

(2)下载火狐插件开发官方例子。链接地址为:

https://developer.mozilla.org/en/Plugins/Samples_and_Test_Cases,该例子包含在unix、mac、

windows等几种平台开发的例子,总共有4个windows平台不同的例子,打开以下工程:

AllWin32Samples.dsw就是windows平台所有的例子。

2.自己新建一个工程,编译一个火狐插件,参考链接如下:

https://developer.mozilla.org/En/Compiling_The_npruntime_Sample_Plugin_in_Visual_Studio

http://wenku.baidu.com/view/8b5f0bd276a20029bd642ddb.html

4.我将火狐插件的开发过程中可能出现而网上较少提及的问题整理如下:

       (1)获取网页的属性参数:

ie是通过每增加一个属性就增加一个接口的方法来获取网页的属性参数,而NPAPI接口不是采用这样的方法,

(2)获取火狐url,有的网页可能嵌套了一层网页,看你具体想获得那一层网页的url:

1)获得自己所在层的url代码如下:

NPObject*locObj = NULL;

NPVariantrval;

NPIdentifiern = NPN_GetStringIdentifier("location");

NPN_GetProperty(m_pNPInstance,sWindowObj, n, &rval);

if(NPVARIANT_IS_OBJECT(rval) && (locObj = NPVARIANT_TO_OBJECT(rval)))

{

       n =NPN_GetStringIdentifier("href");

       NPN_GetProperty(m_pNPInstance, locObj, n,&rval);

       if (NPVARIANT_IS_STRING(rval))

       {

              NPN_ReleaseVariantValue(&rval);//rval里面就有url地址

       }

}

2)获得最上层url代码如下:

NPObject*locObj = NULL;

NPVariantrval;

NPIdentifiern;

n =NPN_GetStringIdentifier("parent");

NPN_GetProperty(m_pNPInstance,sWindowObj, n, &rval);

while(NPVARIANT_IS_OBJECT(rval)&& (tempObj = NPVARIANT_TO_OBJECT(rval)))

{

       if (locObj == tempObj)

       {

              break;

       }

       locObj = tempObj;

       n = NPN_GetStringIdentifier("parent");

       NPN_GetProperty(m_pNPInstance, tempObj,n, &rval);

       }

if (NULL != locObj)

       {

              n =NPN_GetStringIdentifier("location");

              NPN_GetProperty(m_pNPInstance,locObj, n, &rval);

              locObj =NPVARIANT_TO_OBJECT(rval);

 

              n =NPN_GetStringIdentifier("href");

              NPN_GetProperty(m_pNPInstance,locObj, n, &rval);

              if (NPVARIANT_IS_STRING(rval))

              {

                     NPN_ReleaseVariantValue(&rval);//rval里面就有url地址

              }

       }

二.谷歌插件:

谷歌插件跟火狐插件是一模一样的,注册在HKEY_CURRENT_USER\Software\

MozillaPlugins上的火狐插件,谷歌就能识别。但是我们的快玩插件在谷歌上运行的时候会崩溃,通过层层屏蔽代码终于找到导致崩溃的原因是在plugin.cpp文件中的以下这两个函数:

(1)     NPN_Evaluate(m_pNPInstance,doc, &str, NULL);

(2)     NPN_InvokeDefault(m_pNPInstance,NPVARIANT_TO_OBJECT(barval), &arg, 1,&rval);

我暂时的解决方法是屏蔽这两个函数,因为看了这两个函数的前后发现屏蔽了不会有什么影响,通过测试确实发现没什么影响。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值