我安装了一些Chrome扩展程序,需要在使用时打开/关闭。所有这些的默认状态都是关闭的。但是,当我访问某些特定的网页时,我需要将它们全部打开(没有选项来过滤这些扩展中的网页)。
由于这是一件苦差事,我正在尝试创建一个Chrome扩展程序,点击它后,只需打开/关闭所有这些扩展程序。首先,是否可以这样做?如果是的话,我该如何做呢?
例如,我想要自动化的扩展之一是TunnelBear VPN(在需要时通过我的扩展切换)
答案 0 :(得分:2)
我自己正在使用这样的扩展转换器,所以我在这里复制了它的一些部分。
使用chrome.management API启用/停用扩展程序。
使用chrome.commands API通过热键手动启用扩展程序:
manifest.json,相关部分:
"commands": {
"toggle": {
"suggested_key": {
"default": "Alt+T"
},
"description": "Toggle extensions"
}
},
"background": {
"scripts": ["background.js"],
"persistent": false
},
"permissions": ["commands", "management"]
background.js:
var IDs = ['aasdkfjhkjdfhdfjkhdkfjhdkjfh'];
chrome.commands.onCommand.addListener(function(command) {
IDs.forEach(function(ID) {
chrome.management.get(ID, function(oldState) {
chrome.management.setEnabled(ID, !oldState.enabled);
});
});
});
要通过简短的扩展名来获取ID:
var IDs;
chrome.management.getAll(function(info) {
IDs = info.filter(function(extension) {
return extension.shortName.match(/Name1|Name2|Name3/);
}).map(function(extension) {
return extension.id;
});
);
或者,您可以定义两个热键来启用和禁用扩展名。
导航至指定网址时自动启用附加信息
某些扩展程序可能希望在"document_start"
上注入其内容脚本,因此我想我们需要chrome.webNavigation.onBeforeNavigate。即使此事件不能保证实际导航,但它可能是及时启用扩展的唯一方法。
使用event filters指定要激活的网址,documentation中列出了可能的标准。
// Enable the extension upon navigation to example.com
chrome.webNavigation.onBeforeNavigate.addListener(beforeNavigate, {
url: [{hostEquals: 'example.com'}, {urlContains: 'something'}]
});
function beforeNavigate(details) {
if (details.frameId === 0) {
setState(true);
}
}
function setState(newState) {
chrome.management.setEnabled('dhgfhdgfjgjhdgfjdfhdjhfdjhf', newState);
}
// And let's disable the extensions when that site is closed
chrome.tabs.onRemoved.addListener(function(tabId, info) {
chrome.tabs.get(tabId, function(tab) {
if (tab.url.indexOf('://example.com') > 0) {
setState(false);
}
});
});
// In the actual code you may want to track chrome.tabs.onUpdated too
// in order to detect in-tab navigation from example.com to another site
所需权限:"webNavigation"
,"tabs"
背景页面声明可以与#1相同。
答案 1 :(得分:1)
您可以尝试使用chrome.management
API来停用/启用扩展程序。
但是,如果扩展程序所需的功能取决于某些触发器,例如点击扩展程序,则无法复制该功能。