由于adblock for chrome是chrome浏览器的一个插件,当然要遵循extension机制的规范,在编译生成文件中的manifest.json文件相当于是此插件的控制中心,其中配置了各种运行期的重要文件,此文件内容如下:
{
"background": {
"scripts": [
"ext/common.js",
"ext/background.js",
"lib/compat.js",
"lib/info.js",
"lib/io.js",
"lib/adblockplus.js",
"lib/punycode.js",
"lib/publicSuffixList.js",
"lib/basedomain.js",
"lib/sha1.js",
"lib/jsbn.js",
"lib/rsa.js",
"webrequest.js",
"popupBlocker.js",
"iconAnimation.js",
"background.js"
]
},
"browser_action": {
"default_icon": {
"19": "icons/abp-19.png",
"38": "icons/abp-38.png"
},
"default_popup": "popup.html",
"default_title": "__MSG_name__"
},
"content_scripts": [
{
"all_frames": true,
"js": [
"ext/common.js",
"ext/content.js",
"include.preload.js"
],
"match_about_blank": true,
"matches": [
"http://*/*",
"https://*/*"
],
"run_at": "document_start"
},
{
"all_frames": true,
"js": [
"include.postload.js"
],
"match_about_blank": true,
"matches": [
"http://*/*",
"https://*/*"
],
"run_at": "document_end"
}
],
"default_locale": "en_US",
"description": "__MSG_description_chrome__",
"icons": {
"128": "icons/abp-128.png",
"16": "icons/abp-16.png",
"32": "icons/abp-32.png",
"48": "icons/abp-48.png"
},
"manifest_version": 2,
"minimum_chrome_version": "28.0",
"name": "__MSG_name_devbuild__",
"options_page": "options.html",
"permissions": [
"tabs",
"http://*/*",
"https://*/*",
"contextMenus",
"webRequest",
"webRequestBlocking",
"webNavigation",
"unlimitedStorage",
"notifications"
],
"version": "1.8.7.1271",
"web_accessible_resources": [
"block.html"
]
}
简单来说,此文件是根据两个配置文件生成:metadata.common和metadata.chrome;下面是此文件中的几个重要属性:
1、“background”属性定义出了本插件运行期间的后台脚本,比如ext/common.js文件用于声明插件中用到的自定义接口或extensions接口;ext/background.js文件用于监控chrome浏览器的行为,如tab页创建以及网页请求等事件;lib/adblockplus.js文件用于规则文件的解析及匹配,需要重点关注;webrequest.js文件用于监听chrome浏览器的网络请求,是决定此资源文件是否需要被过滤的入口;background.js文件作用比较多,包括导入规则文件和其他js文件,消息处理等;
2、"browser_action"属性指定了此插件在浏览器扩展信息栏中的图标,以及选择此图标之后弹出的页面:
3、"content_scripts"属性描述了此插件的相关信息:如"all_frames": true指定了脚本可以在所有frame中运行,"js"指定的文件可以在"run_at"时间注入到"matches"指定规则的网页中,具体个字段的意义可以参照360的contentscript设计指导http://open.chrome.360.cn/html/dev_content_scripts.html;
4、"default_locale"属性指定了此插件的国际化支持情况("default_locale": "en_US");
5、“description"、"icons"、 "manifest_version"、"minimum_chrome_version"、"name"、"options_page"、"version"属性表明了此插件的相关描述性信息;
6、"permissions”及web_accessible_resources"属性指定了此插件运行期间所具有的权限信息:
可以看出,此文件符合一般插件类所遵循的规则,从这个文件的配置信息也可以清晰的看出此插件运行期间的大概逻辑。
接下来就要从adblock.js入手分析此插件运行的具体流程。