专栏首页闷骚的程序员为基于 xulrunner 的内嵌 Gecko 程序启用 Profile

为基于 xulrunner 的内嵌 Gecko 程序启用 Profile

Mozilla 自带的 Profile 支持实际上是非常给力的,看看 %appdata%/Mozilla/Firefox 下的文件就能知道,这里存放着许多的信息,它们提供了很多东西,例如:

  1. 可以通过 Profiles/…default/chrome 下的 userchrome.css 文件来定制自己的 firefox 外观,比如用 #appmenu-button { display:none !important;} 这样一句就可以去掉 firefox 左上角难看的按钮菜单
  2. 安装的 extensions,Addon 放在这里
  3. 证书相关、组件列表、cookie、插件列表等等都可以在这里找到

等等等等。

合理利用这些文件和信息我们可以在自己内嵌 Gecko 的程序里方便地做一些事情而不用自己去操作和维护一些配置项和数据。

在自己编译完 xulrunner-1.9.2 后尚能找到编译好的 profdirserviceprovidersa_s.lib 来用于 WinEmbed 工程的移植,最近编译了 xulrunner-10.0.2 后发现就没这么幸运了,没有生成这个东东。在头疼了一番后决定自己做一个工程来生成它。根据 xulrunner 源码 mozilla-release/profile/dirserviceprovider 下的几个 makefile 来做就可以了。

直接讲过程吧。

一、编译出需要的 Lib 文件

新建一个 Win32 静态 Lib 空工程,将 mozilla-release/profile/dirserviceprovider 目录下的几个 .h 和 .cpp 文件都添加进工程,将 path/to/xulrunner-10.0.2-sdk/include 添加到工程的附加包含目录,为工程添加预处理器定义 XP_WIN 和 XPCOM_GLUE 这两项。如果一切顺利的话这时候你已经可以顺利地编译出这个 lib 文件了。在 http://download.csdn.net/detail/mzlogin/4382847 可以下载到我的 Demo 工程,如果想编译,需要将上面所讲的 path/to/xulrunner-10.0.2-sdk/include 修改成你本机上 xulrunner sdk 的相应路径。

二、将 Lib 链接进自己内嵌 Gecko 的程序

自写一个启用 profile 的函数,我这里直接使用 WinEmbed 例子里提供的 StartupProfile 函数:

nsresult StartupProfile()
{
    nsCOMPtr<nsIFile> appDataDir;
    nsresult rv = NS_GetSpecialDirectory(NS_APP_APPLICATION_REGISTRY_DIR, getter_AddRefs(appDataDir));
    if (NS_FAILED(rv))
      return rv;

    appDataDir->AppendNative(nsCString("MozillaDemo"));
    nsCOMPtr<nsILocalFile> localAppDataDir(do_QueryInterface(appDataDir));

    nsCOMPtr<nsProfileDirServiceProvider> locProvider;
    NS_NewProfileDirServiceProvider(PR_TRUE, getter_AddRefs(locProvider));
    if (!locProvider)
      return NS_ERROR_FAILURE;

    rv = locProvider->Register();
    if (NS_FAILED(rv))
      return rv;

    return locProvider->SetProfileDir(localAppDataDir);
}

其中的”MozillaDemo”即是你的 profile 文件夹的名字,可以根据你的喜好改动,在这里会是 %appdata%/Mozilla/MozillaDemo

在初始化 Gecko 运行环境的过程里调用完 XRE_InitEmbedding2 之后,添加

if (NS_FAILED(StartupProfile())) {
    result = 8;
}
else {

在此文件开始添加

#include "nsAppDirectoryServiceDefs.h"
#include "nsDirectoryServiceDefs.h"
#include "nsProfileDirServiceProvider.h"

在合适的地方添加

#pragma comment(lib, "编译出的 lib")

顺利的话,就大功告成了,运行一个你的内嵌 Gecko 程序然后去 %appdata%/Mozilla/MozillaDemo 看看吧~有图有真相哦。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Mac 遇到问题集锦

    它可以拖动,可以拉伸改变形状,并不知道它属于哪个程序,一旦出现在 Finder 底部和桌面都会存在。 经过尝试,发现它出现的步骤是这样的:

    mzlogin
  • 记一个 Base64 有关的 Bug

    本文原计划写两部分内容,第一是记录最近遇到的与 Base64 有关的 Bug,第二是 Base64 编码的原理详解。结果写了一半发现,诶?不复杂的一个事儿怎么也...

    mzlogin
  • 设计模式学习之装饰者模式

    如下内容是学习《Head First 设计模式》第三部分《装饰者模式》所得,主要就是一些原文摘抄和少量自己的总结。

    mzlogin
  • SpringBoot之文件批量上传和下载

    之前学习并使用过文件的单个上传:springboot学习日志之DAY08文件上传功能 最近写程序过程当中需要使用到批量上传和批量下载,批量和单个文件的上传下载...

    海加尔金鹰
  • Python遇见C++碰出的编译火花

    Python运行速度太慢,因为做了太多的底层封装。提高速度可以使用多进程,但是多进程占用系统资源太多,为了减少占用的资源并提高性能,就该拿起低级工具,将“前盖”...

    double
  • 洛谷 P1019 单词接龙【经典DFS,温习搜索】

    P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”...

    Angel_Kitty
  • Kafka源码系列之源码解析SimpleConsumer的消费过程

    Kafka源码系列是以kafka 0.8.2.2源码为例讲解。浪尖纯属个人爱好,才写想写这个系列。希望对kafka的使用者们带来帮助。 一,消费者消费的过程讲解...

    Spark学习技巧
  • TCP协议三次握手与四次挥手通俗解析

     TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: ? 图...

    用户1214487
  • 论文阅读: YOLOv1

    YOLOv1是one-stage detector鼻祖、real-time detector鼻祖。

    JNingWei
  • TCP连接建立、断开过程详解

    TCP连接建立过程需要经过三次握,断开过程需要经过四次挥手,为什么? 有没有其他的连接建立、断开方式?

    coderhuo

扫码关注云+社区

领取腾讯云代金券