chromium定制启动首页
chromium中想要定制首页有很多种方法,接下来我将一一介绍,也欢迎大家补充。
1. 最简单的方式-启动带参数
启动带参数,是最简单的让chromium,一启动就打开某个url的方式。在启动chrome.exe的时候,使用命令行的方式启动
chrome.exe http://www.baidu.com
这样打开的chromium,直接就默认打开百度首页了。
2.修改源码实现默认打开某个url
首先先找到chrome_browser_main.cc
这个文件。这个文件的所在地是src/chrome/browser/chrome_browser_main.cc
目录中。chromium的启动,一开始必然会先进入PreMainMessageLoopRunImpl
函数中,所以我们的代码在这里面进行添加。
chromium里面很灵活的使用了配置文件profile
来定制chromium的一些功能,具体可以通过配置profile实现那些功能可以打开pref_names.cc来查看。具体目录是src/chrome/common/pref_names.cc
,我们这里利用的就是kRestoreOnStartup
和kURLsToRestoreOnStartup
这两个key来达到设置启动页的目的。我们来看看,代码里面对于这两个key的描述
// An integer pref. Holds one of several values:
// 0: (deprecated) open the homepage on startup.
// 1: restore the last session.
// 2: this was used to indicate a specific session should be restored. It is
// no longer used, but saved to avoid conflict with old preferences.
// 3: unused, previously indicated the user wants to restore a saved session.
// 4: restore the URLs defined in kURLsToRestoreOnStartup.
// 5: open the New Tab Page on startup.
const char kRestoreOnStartup[] = "session.restore_on_startup";
// The URLs to restore on startup or when the home button is pressed. The URLs
// are only restored on startup if kRestoreOnStartup is 4.
const char kURLsToRestoreOnStartup[] = "session.startup_urls";
通过注释,我们很清楚的知道。当kRestoreOnStartup
的值是4的时候,会打开kURLsToRestoreOnStartup
中设置的url,所以代码我们可以利用这点来写。
(1)代码写死的方法
代码插入的地方在chrome_browser_main.cc
1239行之后。因为,我们在设置profile的时候,一定要在profile初始化完成之后即
profile_ = CreatePrimaryProfile(parameters(),
user_data_dir_,
parsed_command_line());
这段代码后面
插入以下代码,即可实现打开chromium默认显示指定网站
std::string gameUrl = "http://blog.csdn.net/jianglong0156"
PrefService* prefs = profile_->GetPrefs();
prefs->SetInteger(prefs::kRestoreOnStartup, 4);
base::ListValue* url_pref_list = new base::ListValue;
base::StringValue *urlStr = new base::StringValue(gameUrl);
url_pref_list->Set(0, urlStr);
prefs->SetDefaultPrefValue(prefs::kURLsToRestoreOnStartup, url_pref_list);
(2)命令行传入参数的方式
上面那种代码中写死的方式太不智能了。我们选着另外一种使用方式,那就是从命令行传入参数,将我们的gameUrl从命令行传入即可,代码如下
const CommandLine& command_line = parsed_command_line();
if (command_line.HasSwitch("game-url"))
{
std::string gameUrl =
command_line.GetSwitchValueASCII("game-url");
PrefService* prefs = profile_->GetPrefs();
prefs->SetInteger(prefs::kRestoreOnStartup, 4);
base::ListValue* url_pref_list = new base::ListValue;
base::StringValue *urlStr = new base::StringValue(gameUrl);
url_pref_list->Set(0, urlStr);
prefs->SetDefaultPrefValue(prefs::kURLsToRestoreOnStartup, url_pref_list);
LOG(INFO) << "chrome_browser_main.cc(1254):" << "open url " << gameUrl;
}
具体代码解析请看下面定制命令行参数的方式。
定制命令行参数
我们在很多场景下需要输入一些数据让chromium做不同的事情,这个时候使用命令行参数是一个很方便的事情。
通过命令行传入参数
上文在定制首页中提到。我们需要传入定制url。这个时候我们可以在启动chromium的时候传入gameurl
chrome.exe –game-url=”http://blog.csdn.net/jianglong0156”
注意:等号两边没有空格。
这样启动的chromium中,就携带了game-url的数据。
程序中读取数据
获取CommandLine对象
在chrome_browser_main.cc中可以直接使用parsed_command_line()
来获取CommandLine对象。而在其他类中可以使用CommandLine::ForCurrentProcess()
来获取Command Line对象
判定命令行是否传入game-url数据
command_line.HasSwitch("game-url")
获取gmae-url数据
std::string userFilePathStr = command_line.GetSwitchValueASCII("game-url");