opera插件开发

 

要想给opera增加功能,首先要理解opera运行原理。
opera上的按钮和菜单等都是通过读取配置文件来动态显示的,我们要做的就是改变配置文件。
关于Opera的安装、目录和文件详解,可以参考:http://www.operachina.com/viewtopic.php?t=1701&extra=page%3D2

开发方法一:
通过opera内部命令给opera增加功能
简单来讲就是写个菜单或按钮,然后将这个菜单或按钮的功能用opera内部命令写。
opera的内部命令很多,能实现很多功能。比如复制页面地址,链接,选择文本,在编辑框插入文字,移动到另外一个控件,关闭标签,新建标签,显示工具栏,启动其他程序等等。
例如要添加迅雷下载:
打开菜单文件,在Link Popup Menu下添加:
Item, "迅雷"=Execute program, "D:/Program Files/Thunder Network/Thunder/Thunder.exe", "%l"
即可在链接上右击出现迅雷,点击就会启动迅雷,并给迅雷添加此链接下载任务
关于opera内部命令参考:http://www.operachina.com/viewtopic.php?t=309&extra=page%3D1
关于Opera按钮和菜单/语法指南:http://www.operachina.com/viewtopic.php?t=1770&extra=page%3D1

开发方法二:
通过javascript给opera增加功能
这是opera最重要的功能,
javascript可以修复网页上有问题的脚本;通过对网页改变或添加自己的内容,来增强网页功能;控制页面上允许运行什么脚本,以及允许脚本做什么;通过向 UserJS 中添加功能,简化用户书签栏;获取页面上的各个元素等等。
javascript可以写在菜单或按钮中,即在点按钮或选择菜单时运行,
例如要添加迅雷下载(这个多了传递页面的cookies等)
Item, "迅雷"="Go to Page,"javascript:void(inivar='%l')",,,"Attachment Archives" & Go to Page, "javascript:(function(){const rn='/r/n'; var link=inivar;inivar=null; var dc=document.cookie; var cc=(dc&&link.indexOf(location.hostname)!=-1)?dc+'; ':''; var txt=(document.getSelection())?document.getSelection().replace(//s/g,' ').replace(//x22/g,'/x27'):''; var fr=document.createElement('iframe'); fr.setAttribute('id', 'tr_dummy');fr.setAttribute('frameborder', '0');fr.setAttribute('style', 'width:0px;height:0px;visibility:hidden;position:absolute;left:-999em;');fr.setAttribute('src', 'data:text/xunlei;charset=UTF-8,'+encodeURI(document.location+rn+link+rn+txt+rn+cc+rn+rn+rn));document.documentElement.appendChild(fr); var tr=document.getElementById('tr_dummy');tr.parentNode.removeChild(tr);})()" "
javascript也可以放在User Javascript目录,这样opera运行时自动会去调用javascript文件
如果不是很懂javascript,可以参考其他人写的javascript(我就是这样)
javascript参考:http://www.operachina.com/viewtopic.php?f=41&t=32013

开发opera插件比较困难,必须得熟悉opera才行,还要多看其他人写的按钮,菜单,javascript文件,如果有什么想法可以在opera中文官方论坛(http://www.operachina.com/ )提问,论坛上有很多高手,他们会很热情的回答你的,
比如你可以问,如何将当前页添加到百度收藏,论坛上的人会直接给你代码:
Item, "添加到百度收藏" ="Go to page, "javascript:window.open('http://cang.baidu.com/do/add?it='+encodeURIComponent(document.title.substring(0,76))+'&iu='+encodeURIComponent(location.href)+'&fr=ien#nw=1','_blank','scrollbars=no,width=600,height=450,left=75,top=20,status=no,resizable=yes');""
目前比较多的插件可能是有个程序,希望去处理页面,启动程序有好几种方法,一般程序希望得到页面上的信息,可以像上面调用迅雷一样,通过javascript将页面信息获得(可以写入某个文件),然后通过javascript启动程序,并去读取那个写入的文件。javascript可能不会写,可以在opera官方论坛提问,高人会给你答案的。

 

 开发方法三:
或许这种方式开发出来的才是真正的插件。
开发这种插件用于处理opera无法处理的东西,比如音乐,opera不会播放,只能通过插件播放,其他的如flash,视频,pdf文档等,这些opera不会也没能力来处理这些东西,只有这些东西的发明者才会知道如何处理,因此他们开发插件来给opera用。
opera所识别的插件是一个dll文件,只要将此插件放在opera插件目录(/Opera/program/plugins),opera自会识别,打开opera,在地址栏输入:opera:plugins,即可看到opera所找到的插件。
如:
opera显示以下:
Shockwave Flash
              application/futuresplash spl
              application/x-shockwave-flash swf
              D:/Program Files/Opera/Program/Plugins/NPSWF32.dll
表明opera找到一个叫Shockwave Flash的插件,这个插件用来处理网页中application/futuresplash和application/x-shockwave-flash类型的东西
opera官网说opera实现了网景(NETSCAPE)4.0的插件接口,即可以拿网景(NETSCAPE)4.0的插件开发sdk来开发opera插件

以下将以一个例子来讲opera插件的开发。(例子是由vc开发,作用是处理application/x-mplayer2)
首先要设置版本,opera是通过版本信息来识别插件的
用文本编辑器直接打开资源文件rc,在版本信息(  BLOCK "StringFileInfo")里添加三项
            VALUE "FileExtents", "x-mplayer2"                                  //一般显示处理文件的后缀
            VALUE "FileOpenName", "x-mplayer2(*.mp3)"                                 //此无关紧要,不过大多数插件都有
            VALUE "MIMEType", "application/x-mplayer2"         //显示要处理的类型
注意opera是通过FileExtents和MIMEType来识别插件处理的类型
application/rar 对应 rar
application/zip 对应 zip
(更多参考信息可以查看其他插件的版本信息)
然后将工程语言改为"英语(美国)",Code Page改为"Windows 3.1 拉丁语 1 (美国、西欧)版".
[用vc打开版本信息,修改Block Header]
通过以上步骤即可让opera识别到这个插件

浏览器调用插件一般是以下顺序
浏览器执行顺序
浏览器调用NP_GetEntryPoints获得插件实现的函数表
浏览器调用NP_Initialize传递浏览器实现的函数表
浏览器调用NP_Shutdown释放插件;
所以必须将这三个函数接口导出
本人将它再封装了一下,即每次调用插件,浏览器会依次调用以下各个函数
//第一次加载插件时初始化
NPError NPP_Initialize(void)

浏览器调用这个创建实例;
NPP_New

浏览器调用这个来告诉插件窗口已经准备好了或改变大小了
NPP_SetWindow

调用这个函数删除由NPP_New创建的插件实例
NPP_Destroy;

在浏览器不需要插件时调用以释放插件
NP_Shutdown

浏览器可能还会调用一些其他函数,如NPP_NewStream,NPP_DestroyStream等,但本人研究有限,亦不知何时调用。
在以上五个函数中,最重要的是NPP_New
函数定义:
NPError NP_LOADDS NPP_New(NPMIMEType pluginType, NPP instance,
        uint16 mode, int16 argc, char* argn[],
        char* argv[], NPSavedData* saved);
这个函数在浏览器创建插件时调用,其中argc是参数的个数,argn是参数名称,argv是参数值,这三个参数相当重要
假如页面中信息为
<embed
type="application/base-plugin"
width=600
height=40
src="http://www.music.com/test.mp3 ">

argc = 4
argn = {"type", "width", "height", "src"}
argv = {"application/base-plugin", "600", "40",
"http://www.music.com/test.mp3 "}
当浏览器碰到  
<embed src="http://fans.elanzhou.net/UpLoadmusiceFile0109/2004111047884549.mp3 " align="baseline" align="0" width="350" height="68"
   type="application/x-mplayer2"
   pluginspage=""
   name="MediaPlayer1" showcontrols="1" showpositioncontrols="0"
   showaudiocontrols="1" showtracker="1" showdisplay="0"
   showstatusbar="1"
   autosize="0"
   showgotobar="0" showcaptioning="0" autostart="1" autorewind="0"
   animationatstart="0" transparentatstart="0" allowscan="1"
   enablecontextmenu="1" clicktoplay="0"
   defaultframe="datawindow" invokeurls="0">
  </embed>
(以上代码在百度试听mp3页面里截取)
浏览器就会调用我们这个插件,调用NPP_New函数
我们在这个函数里new一个CData对象,用来保存一个插件实例的数据,并将对象地址赋于instance->pdata,这样在NPP_SetWindow和NPP_Destroy里就可以通过传进来的instance参数获取到我们new出来的对象了,我们将src,align,align等属性存到CData里,方便以后获取到。
浏览器接着会调用NPError NP_LOADDS NPP_SetWindow(NPP instance, NPWindow* window)来设置窗口
我们先通过instance获取new出来的CData,并将window里的opera提供的窗口的句柄和大小等保存,然后我们就可以在这窗口里做任何事情了。

如果想通知浏览器做某些事情,这个sdk也提供了很多函数,函数前用NPN_命名,我也将所有的通知浏览器函数提取出来放到class NetscapeFuncs类里,其中只有一些函数我知道干什么的,其他不了解
如:Status  告诉浏览器状态栏应该显示的信息
如果哪位对opera插件开发感兴趣的话,可以一起研究探讨。
附例子程序(vc2003工程):
http://www.namipan.com/d/e6e0168f02bb7bab22d4368f704a18e7e53ccf2a5fe80000
打开程序后,注意以下几点,
1.需要修改输出文件路径,我是写的D:/Program Files/Opera/program/plugins/mp3.dll。你请写你要输出的路径
2.启用插件,除了放到插件目录里,还需要打开opera首选项:高级:下载里,搜索x-mplayer2,将此类型打开方式选择使用插件opera_sdk demo,这样opera碰到application/x-mplayer2就会调用这个插件了
3.程序会写一个log文件,路径在R:盘,如果你需要改变盘符,在AddtoLog函数里可以改
4.可以打开百度mp3音乐试听来测试此插件,此插件会在opera窗口中不断移动hello opera!文字

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Opera是全球浏览速度最快的浏览器,这一点果然名不虚传。但是一些网页由于不符合W3C规范,在浏览的时候,经常显示不正常。我们不得不再打开IE重新浏览,有些麻烦。在这一点上,Firefox,有比较有名的IE Tab,轻轻一点,不用打开IE,就可以随时调用IE核心来浏览网页了,那么Opera有没有类似的插件呢?答案是肯定的,按照以下步骤就可以实现了。 1.下载MeadCo_Neptune.exe。你可以打http://www.meadco.com/neptune/download/ 页面 填上你的名字,邮箱,点“Continue"就可以下载了。如果你嫌麻烦,也可以到这个地址直接下载: http://my.opera.com/亡灵法师/homes/files/MeadCo_Neptune.exe 2. 用WInRAR解压文件,得到npmeadax.dll,把它复制到X:\Program Files\Internet Explorer\PLUGINS\下(X:为你的操作系统所在的盘符。)然后注册。比如在C盘,则在“运行”里输入regsvr32 "c:\Program Files\Internet Explorer\PLUGINS\npmeadax.dll"。记得""和空格一定要带哦,否则会注册不成功的。再把npmeadax.dll复制到Opera的安装目录下Program\Plugins文件夹下。仍然要注册一下。比如Opera安装在C:\Program Files\Opera\Program\Plugins\,下,则在“运行”里输入regsvr32 "C:\Program Files\Opera\Program\Plugins\npmeadax.dll". 3.打开Opera,工具——外观——按钮——我的按钮,把“View in IE”用鼠标拖到工具栏任意位置即可。(这是在Opera9.10版本中的位置,其他版本可能会有所不同。)   这样一来,网页浏览是不是方便多了?
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值