首 页 » 程序开发 » opera插件开发2

opera插件开发2

[ 2008-08-19 23:11 | 浏览次数: 2,096次 | 5条评论 ]

开发方法三:
或许这种方式开发出来的才是真正的插件。


开发这种插件用于处理opera无法处理的东西,比如音乐,opera不会播放,只能通过插件播放,其他的如flash,视频,pdf文档等,这些opera不会也没能力来处理这些东西,只有这些东西的发明者才会知道如何处理,因此他们开发插件来给opera用。
opera所识别的插件是一个dll文件,只要将此插件放在opera插件目录(//program/plugins),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!文字

您可以任意转载本文,但转载时请勿删除作者信息。
作者:hgyxbll,原文链接:http://shashanzhao.com/archives/644.html
上一篇: | 下一篇:

共有5条评论 [点此发言]

  1. 石笼网
    2016-05-24 09:41

    好文章,内容文笔犀利.禁止此消息:nolinkok@163.com

  2. 石笼网
    2016-05-24 09:28

    不错的文章,内容文笔极佳.禁止此消息:nolinkok@163.com

  3. 不锈钢网
    2015-07-02 09:50

    不错的文章,内容气吞山河.禁止此消息:nolinkok@163.com

  4. jacky_qiu
    2011-01-03 21:41

    下载不了啊!可以传给我吗!谢谢
    qiujiejia@gmail.com

  5. jacky_qiu
    2011-01-03 21:40

    非常感谢!好人!阿弥陀佛!