是否可以从扩展程序启用/停用Chrome插件?
我的最终目标是编写一个扩展,对于某些特定的插件(在我的情况下是Flash),提供一键式方式来执行相当于chrome://plugins
,找到列表中的相关插件,然后单击“启用”或“禁用”。
我发现 可以通过在chrome://plugins
上的JavaScript控制台中输入以下代码来实现所需的结果。现在问题是如何通过扩展或书签一次点击完成此操作。我在代码之后保留(缩写形式)“更新1”以显示我是如何到达它的。
要将Flash 关闭:chrome.send('enablePlugin', ['/Applications/Google Chrome.app/Contents/Versions/37.0.2062.94/Google Chrome Framework.framework/Internet Plug-Ins/PepperFlash/PepperFlashPlayer.plugin', String(false), String(false)]);
要启用Flash 开启:chrome.send('enablePlugin', ['/Applications/Google Chrome.app/Contents/Versions/37.0.2062.94/Google Chrome Framework.framework/Internet Plug-Ins/PepperFlash/PepperFlashPlayer.plugin', String(true), String(false)]);
在chrome://plugins
页面上,plugins.js
中有一些事件处理程序可以监听“启用”或“禁用”链接的点击次数。这是第123-139行:
renderTemplate(pluginsData);
// Add handlers to dynamically created HTML elements.
var links = document.getElementsByClassName('disable-plugin-link');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function() {
handleEnablePlugin(this, false, false);
return false;
};
}
links = document.getElementsByClassName('enable-plugin-link');
for (var i = 0; i < links.length; i++) {
links[i].onclick = function() {
handleEnablePlugin(this, true, false);
return false;
};
}
所以这基本上将输入传递给通用插件开/关功能,在第192-203行:
/**
* Handles a 'enable' or 'disable' button getting clicked.
* @param {HTMLElement} node The HTML element for the plugin being changed.
* @param {boolean} enable Whether to enable or disable the plugin.
* @param {boolean} isGroup True if we're enabling/disabling a plugin group,
* rather than a single plugin.
*/
function handleEnablePlugin(node, enable, isGroup) {
// Tell the C++ PluginsDOMHandler to enable/disable the plugin.
chrome.send('enablePlugin', [String(node.path), String(enable),
String(isGroup)]);
}
感谢开发者工具/“检查元素”,很清楚要发送给函数的输入 - node.path
类似于/Applications/Google Chrome.app/Contents/Versions/34.0.1847.137/Google Chrome Framework.framework/Internet Plug-Ins/PepperFlash/PepperFlashPlayer.plugin
。
答案 0 :(得分:0)
我在AppleScript中编写了一个相当粗略但有效的实现。我仍然希望能够在Chrome中找到更优雅和内在的东西。
以下是将Flash 设置为的脚本。要将其重新关闭,请将true
替换为false
。
编辑:修改为每次Chrome更新其版本时停止脚本中断。此时我已经使用这个脚本两个月了,它满足了我的需求。但是,如果有人有一个很好的,独立于平台的方式来实现这一点,我宁愿让它成为“答案”。
tell application "Google Chrome"
activate
open location "chrome://plugins"
set myJS to "chrome.send('enablePlugin', ['/Applications/
Google Chrome.app/Contents/Versions/" & version &
"/Google Chrome Framework.framework/Internet Plug-Ins/PepperFlash/
PepperFlashPlayer.plugin', String(true), String(false)]);"
delay 1
tell window 1 to tell active tab
execute javascript myJS
close
end tell
end tell