从扩展程序启用/停用Chrome插件

时间:2014-05-22 03:09:35

标签: google-chrome google-chrome-extension

是否可以从扩展程序启用/停用Chrome插件?

我的最终目标是编写一个扩展,对于某些特定的插件(在我的情况下是Flash),提供一键式方式来执行相当于chrome://plugins,找到列表中的相关插件,然后单击“启用”或“禁用”。

更新2

我发现 可以通过在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)]);

更新1

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

1 个答案:

答案 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