说说我选择使用gecko内核的优势: 其一 gecko内核开发的浏览器 例如FireFox为代表的mozilla 公司的浏览器 是速度相当快速的 其二 gecko内核的浏览器有相当庞大的家族 其插件众多 通过XPCOM 渲染)引擎 加上XPCOM跟XULRunner以后就会相当强大 GeckoFX当然也需要XPCOM的支持 这个开源项目已经很久没有更新了 不停留在Gecko1.9.1的基础上 也就是Firefox 3.5 可以是程序开始的地方Program.cs中或者是构造函数(比如说用到此控件的用户控件的构造函数中) 添加 Skybound.Gecko.Xpcom.Initialize(xulrunnerPath) ; xulrunnerPath是XULRunner的完全路径 包含xul.dll, xpcom.dll什么的那个目录 (3)(可选)通过设置Xpcom.ProfileDirectory修改保存Profile 最后要说明的是这还只能说是一个简单的封装 并没有对XPCOM所有的接口进行完全的封装,有些功能我们还是要自己往其中添加。下面提供一些比较有用的网址。
libgtk-3.so.0: cannot open shared object file: No such file or directory Couldn’t load XPCOM 报错信息 [root libmozgtk.so: libgtk-3.so.0: cannot open shared object file: No such file or directory Couldn't load XPCOM firefox/libxul.so: libXt.so.6: cannot open shared object file: No such file or directory Couldn't load XPCOM
2.4 XPCOM XPCOM(Cross Platform Component Object Model)是一种跨平台组件对象模型,类似于微软的 COM。 大多数 XPCOM 组件并非由核心组件所提供,而是由其他平台或应用程序、甚至是延伸套件所提供。 而在Firefox中,绝大多数的功能都基于XPCOM机制。 例如Firefox为扩展开发提供的接口都是用XPCOM方式来实现的。 而RDF模块实现了一系列XPCOM接口,用于在安装扩展或者处理扩展过程中,读取RDF文件信息。 例如首先的研究方向是XPCOM的具体结构和XULRunner这部分。
它现在还不能支持 XPCOM。这些代码起源于 Mozilla 传统基础代码。 dbm 包含用于管理,读写哈希表的 C 代码。 Leaky 能帮忙探测内存泄漏和 XPCOM 引用计数的问题。 uriloader 包含为某一 URL 包含的内容调用正确的查看器的 C 接口和代码。 xpcom 包含低层次的 C 接口,C 代码,少量汇编代码和命令行工具用于实现 XPCOM 组件(which stands for “Cross Platform Component Object Model XPCOM 是一种允许 Mozilla 导出接口并且让它们自动化且有效于 Javascript 脚本,Microsoft COM 和规则的 Mozilla C 代码的机制。 一些低层次的 XPCOM classes 和 interfaces 也在这里定义(如所有平台的事件循环)。XPCOM 能兼容并且与 Microsoft COM 很像(虽然 XPCOM 是跨平台的)。
它现在还不能支持 XPCOM。这些代码起源于 Mozilla 传统基础代码。 dbm 包含用于管理,读写哈希表的 C 代码。 Leaky 能帮忙探测内存泄漏和 XPCOM 引用计数的问题。 uriloader 包含为某一 URL 包含的内容调用正确的查看器的 C 接口和代码。 xpcom 包含低层次的 C 接口,C 代码,少量汇编代码和命令行工具用于实现 XPCOM 组件(which stands for “Cross Platform Component Object Model XPCOM 是一种允许 Mozilla 导出接口并且让它们自动化且有效于 Javascript 脚本,Microsoft COM 和规则的 Mozilla C 代码的机制。 一些低层次的 XPCOM classes 和 interfaces 也在这里定义(如所有平台的事件循环)。XPCOM 能兼容并且与 Microsoft COM 很像(虽然 XPCOM 是跨平台的)。
如在预编译选项里添加 XPCOM_GLUE,XP_WIN,_CRT_SECURE_NO_WARNINGS。 为什么要添加预编译选项 XPCOM_GLUE 在原版的 winEmbed 目录下,有 makefile 文件,里面有DEFINES += -DXPCOM_GLUE这么一句。 $(LIB_SUFFIX) \ $(XPCOM_STANDALONE_GLUE_LDOPTS) \ $(NULL) 这么一段,很显然提示我们引入库 profdirserviceprovidersa_s ,然后在 autoconf.mk 文件里可以看到 XPCOM_STANDALONE_GLUE_LDOPTS = $(LIBXUL_DIST)/lib/$(LIB_PREFIX)xpcomglue. RnsGetInterface@@UBEIABUnsID@@PAPAX@Z) 拿掉预编译选项 XPCOM_GLUE 会产生错误 1>.
libmozgtk.so: libgtk-3.so.0: cannot open shared object file: No such file or directory Couldn't load XPCOM
例如Xpcom,chrome机制等。 3.看看入门例子,用记事本,做一个最简单的扩展,运行一下。另外,使用Firefox,下载一些常用的扩展,并查看一下人家的源代码。 4.正式搭建开发环境。 需要了解:chrome,rdf,manifest,xul,xpcom等概念。
如在预编译选项里添加 XPCOM_GLUE,XP_WIN,_CRT_SECURE_NO_WARNINGS。 总之让编译命令行看起来像下面这样(具体为何后面解释): 从项目属性的 C/C++ 里看到的编译命令行: /O2 /Oi /GL /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "XPCOM_GLUE 为什么要添加预编译选项 XPCOM_GLUE 为什么要添加预编译选项 XP_WIN 为什么要添加引入库 xpcomglue.lib,为什么要有(4)步骤 LIBS = \ $(DEPTH)/profile $(LIB_SUFFIX) \ $(XPCOM_STANDALONE_GLUE_LDOPTS) \ $(NULL) 为什么要将 Project->Propeties->Configuration Properties
目录下的几个 .h 和 .cpp 文件都添加进工程,将 path/to/xulrunner-10.0.2-sdk/include 添加到工程的附加包含目录,为工程添加预处理器定义 XP_WIN 和 XPCOM_GLUE
目录下的几个 .h 和 .cpp 文件都添加进工程,将 path/to/xulrunner-10.0.2-sdk/include 添加到工程的附加包含目录,为工程添加预处理器定义 XP_WIN 和 XPCOM_GLUE
ResourceHandle类提供不同的实现,待编译时择机选择对应目录下的实现,这种方式从架构的角度看比较简单,但往往不能让程序同时使用多个网络库,进而由程序动态切换使用不同网络库实现,而gecko在xpcom 这一点与gecko中将不同的xpcom接口Binding给Javascript实现有本质上的差别,在gecko中通过xpconnect及一组classinfo来维护原生元素与JS对象之间的关系,不同原生元素对应的
加强多进程 Firefox 的兼容性(例如 Electrolysis 项目); 对 Firefox 内部代码进行更改时不会破坏附加组件; WebExtensions API 应该比现有的 Firefox XPCOM
Mozilla的一个关键部分是XPCOM和NSPR。 ? Webkit的处理流程: ? Mozilla架构设计:界面和实现分离。采用标记语言,JavaScript,C++来开发。 Mozilla的一个关键部分是XPCOM和NSPR。
周边的自动化技术实现,比如使用 PhantomJS、electron、Puppeteer 等基于 webkit 的无头(headless)浏览器的 JS 库,也可以直接用Selenium,还有基于 Mozilla 的 XPCOM
在Firefox 57版本中,移除了基于XUL/XPCOM的扩展,但没有移除WebExtensions。即使是在最新的60版本中,浏览器内部仍然使用这种机制。