很多人(至少我)觉得FireFox的源码难看(至今没有完整的看过某个模块),是因为其中不光有C/C++的代码 还有很多是用XUL+CSS做界面用JavaScript做后台实现的,一直以来JS的调试都是个很头疼的问题吧。另外还有很大一部分是以来XPCOM功能实现的。
“XULRunner是一个Mozilla runtime package,可以用于启动XUL+XPCOM的应用程序。它提供安装、升级、卸载这些程序的机制。XULRunner的还将提供libxul,一个允许在其他产品中嵌入Mozilla技术的解决方案。”
——翻译自Mozilla开发者中心的介绍
XULRunner 可以下载到最新的的XULRunner 版本
XULRunner的文件都是干啥的
XULRUNNER
│ freebl3.chk
│ freebl3.dll ---------------〉NSS Freebl Library
│ IA2Marshal.dll ---------------〉
│ js3250.dll ---------------〉Netscape 32-bit JavaScript Module
│ LICENSE
│ mozcrt19.dll ---------------〉Mozilla自己的C运行库
│ nspr4.dll ---------------〉NSPR Library
│ nss3.dll ---------------〉NSS Base Library
│ nssckbi.dll ---------------〉
│ nssdbm3.dll ---------------〉Legacy Database Driver
│ nssutil3.dll ---------------〉NSS Utility Library
│ plc4.dll ---------------〉PLC Library
│ plds4.dll ---------------〉PLDS Library
│ smime3.dll ---------------〉NSS S/MIME Library
│ softokn3.dll ---------------〉NSS PKCS #11 Library
│ sqlite3.dll ---------------〉SQLite Database Library
│ ssl3.dll ---------------〉NSS SSL Library
│ xpcom.dll ---------------〉XPCOM跨平台组件模型 其接口正式上篇说的我们要封装的
│ xul.dll ---------------〉不解释了 就这个大8M多│
├─chrome ---------------〉此目录下有众多的Chrome 当我们对Firefox添加什么功能的时候往往会用到 比如说
│ about:config的设置界面就在这里面 都是些jar文件与manifest文件 jar文件有规定的目│ 录结构,可以参考一些FireFox扩展或者插件开发的文章
├─components ---------------〉xpt文件 露插件对外的接口描述
│
├─defaults ---------------〉一些默认的设置好像可以在这里更改 不过一般不用改
│
├─dictionaries ---------------〉
│
├─greprefs ---------------〉啧啧 这个可是好东西
│ all.js ---------------〉所有about:config
│ security-prefs.js ---------------〉关于安全的
│ xpinstall.js ---------------〉关于插件安装的 不过就两个属性enable 跟是否需要白名单
├─modules ---------------〉一些MOZ自己的还有比较通用的例如时间显示下载信息显示模块
│
├─plugins
│
└─res ---------------〉各种图标字体表格等等资源
从下面这个网站
http://www.oxymoronical.com/experiments/apidocs/
可以查到XPCOM的interface 应该那个Mozilla自己的网站上也有 不过我没扒翻到。。。。。。
具体怎么用我们下一篇文章里介绍。可以实现浏览器最基本的功能,想FireFox大部分比较使用的小功能 还是通过XUL+CSS写界面再结合JS等等来实现。我的目标是,能够在自己的浏览器“使用”上FireFox的某些插件、扩展(为什么说使用,因为很多扩展都是开源的,就算不能直接使用,我们说不定也可以通过修改剪接地用上)
下集预告: 比如说用到nsIScrollable来实现我们希望的(比如说禁用 隐藏 滚到指定位置 按行、页滚)滚动条的时候用到的XPCOM接口
[Guid("919e792a-6490-40b8-bba5-f9e9ad5640c8"), ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] interface nsIScrollable { int getCurScrollPos(int scrollOrientation); void setCurScrollPos(int scrollOrientation, int curPos); void setCurScrollPosEx(int curHorizontalPos, int curVerticalPos); void getScrollRange(int scrollOrientation, out int minPos, out int maxPos); void setScrollRange(int scrollOrientation, int minPos, int maxPos); void setScrollRangeEx(int minHorizontalPos, int maxHorizontalPos, int minVerticalPos, int maxVerticalPos); int getDefaultScrollbarPreferences(int scrollOrientation); void setDefaultScrollbarPreferences(int scrollOrientation, int scrollbarPref); void getScrollbarVisibility(out bool verticalVisible, out bool horizontalVisible); }
最后一些有用的参考资料:
http://www.ibm.com/developerworks/cn/opensource/os-xpcomfirefox/index.html
http://www.shangducms.com/post/2009/12/13/XULRunner.aspx