admin'; ?>

首页 / Development & communication

Firefox Plugins 插件开发

By admin •  2020-08-09 23:53:41 •  351次点击
插件?组件?扩展?到底都是什么东西?
插件就是.dll, .so 二进制文件,一般用c/c++ 开发,当然用js也可以, 组件就是插件.
扩展就是 xul+js+html+css...以一定的目录结构,放一起,然后用zip打包,后缀名改成.xpi

插件分窗口插件(也叫容器插件)和无窗口插件,窗口插件就是带显示功能,比如libflashplayer.so,  为了提高firefox的稳定性,窗口插件一般用plugin-container独立进程加载
插件如果要实现与js交互,就要带个xpt文件, 这个文件名要写到 components/interfaces.manifest 中,顾名思义,interfaces.manifest暴露的是插件的接口信息,那么插件本身是如何被加载的呢?插件的加载,在各个系统下,各不相同.windows下是注册表,Linux下是
/usr/lib/mozilla/plugins/
/usr/lib64/mozilla/plugins/
~/.mozilla/plugins
如果你改了greprefs.js配置文件,最后加入一行:
pref("plugins.load_appdir_plugins", true);
那么firefox所在目录(以下我们一律简称为当前目录), 新建个plugins子目录,然后把你的.so文件丢进去,firefox也会加载它们.
地址栏中输入 about:plugins  你能看到各个被加载的插件及它们所在的文件路径.
当前目录下有个chrome.manifest文件,你可以写个自己的插件描述文件,如: nsxpconn.manifest 放在components子目录下, 内容如下
binary-component nsxpconn.so
保证nsxpconn.so 与nsxpconn.manifest都在components子目录下.

然后把你的nsxpconn.manifest所在位置,写入chrome.manifest,如
manifest components/nsxpconn.manifest
单独一行,追加写入即可.
重启firefox后, firefox也能加载你的二进制插件.

插件的作用是,隐藏关键源码,提高执行效率.实现js/c++交互.

在c++ 中, 使用xpcom组件
nsCOMPtr ohsXpConn = do_GetService(NS_XPCONN_CID);
nsString asParam0;
asParam0.Append(L"open");
 
nsString asParam1;
asParam1.Append(L"c:\\windows\\notepad.exe");
nsString asParam2;
nsString asParam3;
uint32_t unrtn = 0;
ohsXpConn->ShellExecuteW(0, asParam0, asParam1, asParam2, asParam3,  1, &unrtn); 

在web网页也可以调用它.
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
 
var ohsXpConn  = Components.classes["@oltag.com/XpConn;1"].createInstance();
ohsXpConn  = ohsXpConn.QueryInterface(Components.interfaces.nsIOhsXpConn);
 
ohsXpConn.ShellExecuteW(0, 'open', 'c:/windows/notepad.exe', '', '', 1);

nsxpconn 插件源码已包含在他山框架demo中.

他山界面v22.0.2 提供plugins演示
他山界面v22.0.2.rar 下载(13MB+2MB(插件大小)):http://oltag.com:8080/yaolixing/18/10/07/他山界面演示v22.0.2_plugins.rar
HTML,js的性能是无法与c++相比的,在性能要求高的场合,可以使用c++开发控件,下面的例子是嵌入chartDirector制图Demo程序,ChartDirector Demo是用MFC开发的,最后一个是OpenGl演示




https://bbs.otherhill.com/uploads/file/20210818/v52.7plugins_demo.rar      (27MB)


参考:
1. https://developer.mozilla.org/en-US/docs/Plugins/Guide/Plug-in_Basics
2. js,c++如何互相调用: https://bbs.otherhill.com/index.php/topic/show/56
3. https://developer.mozilla.org/en-US/docs/Gecko_Plugin_API_Reference/Plug-in_Development_Overview




0 回复 | 直到2022-10-04 18:22添加回复

回复

登录发表 or 还没有账号?去注册

他山跨平台混合应用开发框架

现在注册 已注册请 登入
Development & communication

节点列表

Demo发布

Windows  Linux  Android  Latest progress 

经验交流

Function Advise  Windows  Linux  Android  Development & communication  Resource sharing  js  xul  Scheme 

BUG反馈

Windows  Linux  Android 

学习生活

灌水乐园  大话界面 

Linux跨版本开发环境LiveCD ISO