chrome.declarativeContent
描述: |
使用 chrome.declarativeContent API 根据网页内容进行某些操作,而不需要读取网页内容的权限。
|
可用版本: |
从 Chrome 33 开始支持。
|
权限: |
"declarativeContent"
|
了解更多: |
声明事件
activeTab |
用法
声明式内容 API 允许您根据网页的 URL 和它的内容匹配的 CSS 选择器来显示您的扩展程序的页面按钮,而不需要拥有主机权限或插入内容脚本。为了在用户单击您的页面按钮后能够与网页交互,请使用 activeTab 权限。
如果您需要更精确地控制什么时候显示您的页面按钮,或者需要在用户单击它之前更改它的外观以匹配当前标签页,您还是需要继续使用页面按钮 API。
规则
作为一种声明式 API,该 API 让您在
onPageChanged
事件对象上注册规则,当一系列由
PageStateMatcher
表示的条件满足时执行某个操作(目前只有
ShowPageAction
)。
当且仅当列出的所有条件都满足时,PageStateMatcher
才会匹配网页。当 https://www.google.com/
上的页面存在密码字段时,以下规则将为该页面显示页面按钮:
var rule1 = { conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: { hostEquals: 'www.google.com', schemes: ['https'] }, css: ["input[type='password']"] }) ], actions: [ new chrome.declarativeContent.ShowPageAction() ] };
注意:所有条件和操作都通过构造函数创建,如以上例子所示。
如果要为包含视频的网站显示页面按钮,您可以添加第二个条件,每一个条件都足以触发所有指定的操作:
var rule2 = { conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: { hostEquals: 'www.google.com', schemes: ['https'] }, css: ["input[type='password']"] }), new chrome.declarativeContent.PageStateMatcher({ css: ["video"] }) ], actions: [ new chrome.declarativeContent.ShowPageAction() ] };
添加的规则在浏览器重新启动后也将保留,所以请按照下面的方式注册它们:
chrome.runtime.onInstalled.addListener(function(details) { chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { chrome.declarativeContent.onPageChanged.addRules([rule2]); }); });
注意:您一定要批量注册或取消注册规则,而不是一个一个地进行,因为每一次这样的操作都会重新创建内部的数据结构,这一重新创建的过程需要大量的计算,但是利用了一种更快的匹配算法。
将以上规则与 activeTab 权限一起使用,就能创建一个不需要任何安装时警告的扩展程序,使用户在相关的页面上单击它的页面按钮,并当用户单击页面按钮时在这些页面上运行。
CSS 匹配
PageStateMatcher.css
条件必须为复合选择器,这意味着您在选择器中不能包含组合器,例如空格或“>
”。这有利于让 Chrome
浏览器更高效地匹配选择器。
复合选择器(可以使用) | 复杂选择器(不能使用) |
---|---|
a | div p |
iframe.special[src^='http'] | p>span.highlight |
ns|* | p + ol |
#abcd:checked | p::first-line |
CSS 条件只匹配显示的元素:如果匹配您的选择器的元素或者它的某个父元素为
display:none
,这样不会使条件匹配。具有
visibility:hidden
样式、位置在屏幕以外或者被其他元素隐藏的元素仍然可以使您的条件匹配。
摘要
类型 | |
---|---|
PageStateMatcher | |
ShowPageAction | |
RequestContentScript | |
事件 | |
onPageChanged |
类型
PageStateMatcher
属性 | ||
---|---|---|
events.UrlFilter | (可选) pageUrl |
如果页面的顶层 URL 满足 UrlFilter 的条件则匹配。 |
array of string | (可选) css |
如果在与页面主框架来源相同的某个框架中,数组中的所有 CSS 选择器都匹配显示的元素,则匹配网页状态。为了提高匹配速度,该数组中的所有选择器必须是复合选择器。注意,在这里列出几百个 CSS 选择器或者每个网页都能匹配几百次的 CSS 选择器可能会使网站变慢。 |
ShowPageAction
RequestContentScript
从 Chrome 38 开始支持。警告:目前为 Dev 分支。了解更多内容
属性 | ||
---|---|---|
array of string | (可选) css |
以内容脚本的形式插入的 CSS 文件名。 |
array of string | (可选) js |
以内容脚本的形式插入的 JavaScript 文件名。 |
boolean | (可选) allFrames |
内容脚本是否在匹配网页的所有框架中运行,还是仅在顶层框架中。默认为 false。 |
boolean | (可选) matchAboutBlank |
是否在 about:blank 和 about:srcdoc 中插入内容脚本,默认为 false。 |
事件
onPageChanged
提供声明式事件 API,包括 addRules、removeRules 和 getRules。
chrome.declarativeContent.onPageChanged.addRules(array of Rule rules, function callback)
chrome.declarativeContent.onPageChanged.removeRules(array of string ruleIdentifiers, function callback)
chrome.declarativeContent.onPageChanged.getRules(array of string ruleIdentifiers, function callback)
支持的条件
支持的操作
示例扩展程序
- Page action by content – Shows a page action for HTML pages containing a video
- Page action by URL – Shows a page action for urls which have the letter 'g' in them.