最近有接到任务需要开发一款具备自动抓取功能的chrome插件,借此机会也对chrome插件开发工作有了初步的认识,下面给大家分享一下心得:
1.综述
应该说chrome插件的开发环境对于开发人员来说是非常友好的(等于不需要配置开发环境),只要有编译器就可以了。只要会js、html、css,就能进行开发了;
2.基本结构
根据官方文档中get start的内容,chrome插件最基本需要四个文件:
1.manifest.json——这是一个配置文件,里面记录了插件的使用范围、作者、版本、其余需要加载的文件等内容;
2.icon.png——这个一看便知,就是插件的图标;
3.popup.html——点击插件图标,弹出的页面(如果在manifest.json中配置了default_popup为该文件的话);
4.popup.js——弹出页面需要加载的js文件;
上述只是该插件最基本的需求,根据实际的开发经验来看,使用popup作为弹出的基本菜单的架构,无法满足自动抓取功能的要求,因此采用了以background为主的设计思路,下文会详解这方面的内容;
3.加载插件
插件可以打包后加载,也可以直接加载(把上述四个文件放在一个文件夹内即可),在chrome浏览器的设置中的扩展功能中,可以选择加载插件,非常方便;
4.设计思路
这块内容比较重要,这次我先一一列举,以后有必要的话,再细说:
1.background.js是核心文件,在配置文件中设置"background": { "page": "background.html" },在background.html中引用必要的文件(如background.js,jquery以及其他一些有必要加载的文件);
2.当点击插件图标时,一个background服务就已经开启了;
3.不同页面之间是无法直接通讯的,想要控制不同的页面处理不同的工作,就需要在background.js中定义一系列监听事件(1.点击插件图标的事件;2.新建或更新tab的事件;3.捕捉message的事件等);
4.无论任何新建或更新tab的事件都会被background.js捕捉到,可以做后续处理(比如注入一些js文件);
5.几个特别重要的方法:
chrome.tabs.executeScript(tab_id, code_or_action)——指定某个tab运行特定的代码或方法;
chrome.runtime.sendMessage { action: 'stop_grab_list', other_params: xxx}——发送消息;
chrome.runtime.onMessage.addListener (request, sender, sendResponse) ->——捕捉上面的消息,request.action就能获取'stop_grab_list',request.other_params就能获取xxx。sender就是发消息的主体,用sender.tab就能获得发送消息的tab页;sendResponse用于返回结果;
chrome.browserAction.onClicked.addListener (tab) ->定义点击插件图标之后,执行的代码;
chrome.tabs.onCreated.addListener (tab) ->——定义新建tab之后自动执行的代码;
chrome.tabs.onUpdated.addListener (tab_id, info, tab) ->定义更新tab之后自动执行的代码,其中的info可以调用info.status == 'complete'来判断页面是否已经加载完成,这个很重要!
这次的内容主要以抛出一些概念为主,如果需要深入了解,建议直接去看chrome extension的官方文档,后期我也会再以某个实例进行一次分享。