Chrome浏览器扩展开发系列之十七:扩展中可用的chrome.events API
chrome.events中定义了一些常见的事件类型,可以供Chrome浏览器扩展程序发出对应的事件对象。
对于关注的事件,首先要通过addListener()在对应的事件上注册监听器,,示例如下:
1 chrome.alarms.onAlarm.addListener(function(alarm) { 2 appendToLog(‘alarms.onAlarm --‘ 3 + ‘ name: ‘ + alarm.name 4 + ‘ scheduledTime: ‘ + alarm.scheduledTime); 5 });
addListener()总是带一个参数,这就是事件处理函数。一旦事件发生,监听器即调用事件处理函数。
事件处理函数还可以有参数,具体参数的数量和类型与监听的事件相关。
chrome.events中,事件没有任何属性,只包含如下的常用方法:
方法名
返回值
类型
注释
addListener(function() {...})
无
为事件注册监听器,并给出事件处理函数
removeListener(function() {...})
无
删除事件的监听器
hasListener(function() {...})
boolean
判断事件上是否注册有监听器
hasListeners()
boolean
判断事件上是否注册有监听器,没有回调函数
addRules(array of rules,
function (array of rules) {...})
无
为事件注册规则
如果第一个参数的数组中有无效规则,则不会注册任何规则
removeRules(array of string ruleIdentifiers,
function() {...})
无
删除事件上注册的所有规则。
如果有第一个参数(可以没有),则只删除注册的、在范围内的规则
getRules(array of string ruleIdentifiers,
function (array of rules) {...})
无
返回事件上注册的所有规则。
如果有第一个参数(可以没有),则只返回注册的、在范围内的规则
有这样一种场景,对于发生的事件,只有当满足某些条件时才进行处理,即并非要对发生的该事件都进行处理。对于这种情况,可以通过为事件处理函数附加过滤条件实现,也可以采用全新的事件规则机制。下面分别讨论。
1) 过滤事件
过滤事件,就是对于监听的事件,只有当其符合过滤条件时,才会调用事件处理函数。多个过滤条件之间是“或”的关系。示例如下:
1 chrome.webNavigation.onCommitted.addListener( 2 function(e) { 3 // ... 4 }, {url: [{hostSuffix: ‘google.com‘},//过滤条件1 5 {hostSuffix: ‘google.com.au‘}]}//过滤条件2 6 );
2) 声明式事件处理器(事件规则)
声明式事件处理器就是为事件定义处理规则。注册了规则的事件对象,当事件对象发生时,不会再调用事件处理函数,而是检测注册的规则的条件是否有匹配,如果匹配则执行规则的行为。
通常,规则必须包含声明条件和处理行为。示例如下:
1 var rule = { 2 id: "my rule", // 标识符可选, 没有则自动生成 3 priority: 100, // 优先级可选, 默认为100 4 conditions: [ /* my conditions */ ], 5 actions: [ /* my actions */ ] 6 };
一个规则可以拥有多个条件,条件之间是“或”的关系,即任意一个条件满足则表示匹配规则。
一个规则可以拥有多个处理行为,行为之间是“与”的关系,即所有的行为作为一个整体,在条件匹配的时候一起执行。
chrome.events.Rule对象的属性如下:
属性名
类型
必选/可选
注释
id
string
可选
标识符
tags
array of string
可选
规则的标签,多个规则可以根据标签分组
conditions
array of any
必选
触发处理行为的条件
actions
array of any
必选
任一条件匹配时触发的处理行为
priority
integer
可选
规则的优先级,默认100
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/66591.html