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

本文介绍如何利用Mozilla Firefox的Profile功能来自定义浏览器外观及配置,并详细讲解了如何在自编译的xulrunner中加入Profile支持,包括编译所需的Lib文件及在程序中启用Profile的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         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.youkuaiyun.com/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看看吧~有图有真相哦。


 

Blog: http://blog.youkuaiyun.com/mzlogin

Email: mzlogin(at) qq.com


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值