.NET Gecko内核浏览器开发 ——XULRunner介绍(上)

很多人(至少我)觉得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

https://developer.mozilla.org/cn/XULRunner/XULRunner_入门

https://developer.mozilla.org/cn/Toolkit_API

原文地址:https://www.cnblogs.com/zhuo/p/1690947.html