最近开始使用Chrome扩展程序。 我试图找出如何只在特定网站上执行功能。
例如,我想在Stack Overflow上显示一个警告框。我使用Chrome的声明性内容API来匹配主机。
我还没能在SO上找到类似的问题。
我的manifest.json文件在后台运行以下代码块。
'use strict';
chrome.runtime.onInstalled.addListener(function() {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
chrome.declarativeContent.onPageChanged.addRules([{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: {
hostEquals: 'stackoverflow.com'
}
})
],
actions: [new chrome.declarativeContent.SOOnlyFunction()]
}]);
});
});
function SOOnlyFunction()
{
alert('On SO');
}
答案 0 :(得分:3)
您可以使用Chrome API实现此行为:
当加载新页面时,您可以调用
chrome.tabs.onUpdated
在这里你可以过滤网址
并创建通知。
chrome.notifications.create
在你的清单中添加这些对象:
"permissions": [ "activeTab","tabs","notifications" ],
"background": {
"scripts": ["background.js"],
"persistent": false
}
以下是我的background.js的样子。
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
if(changeInfo.url != null){
console.log("onUpdated." + " url is "+changeInfo.url);
// creates Notification.
showNotification();
}
});
function showNotification() {
chrome.notifications.create( {
iconUrl: chrome.runtime.getURL('img/logo128.png'),
title: 'Removal required',
type: 'basic',
message: 'URL is',
buttons: [{ title: 'Learn More' }],
isClickable: true,
priority: 2,
}, function() {});
}
它不完整但你会得到这个想法。
答案 1 :(得分:3)
除了作为操作内置的内容之外,您不能使用chrome.declarativeContent
。
目前具体是ShowPageAction
,SetIcon
和 (仍处于试验阶段)。RequestContentScript
无法轻松扩展的原因是因为declarativeContent
在本机代码中实现,是JavaScript事件处理程序的一种更有效的替代方法。
总的来说,它是一个雄心勃勃但基本上不可行/不发达/被遗弃的想法来自Chrome开发者,与declarativeWebRequest
类似的命运。
使用所述JS处理程序查看the other answer的实现提示。
或者,您仍然可以使用仅在预定义域上激活的内容脚本declared in the manifest使其成为“声明性”(只要您事先知道域为常量)。然后他们可以自己做某事或poke the event/background page做某事。
最后,如果您的目标是重定向/阻止请求,则需要webRequest
API。