如何在Chrome扩展程序中的file:/// URL中执行content_scripts

时间:2015-11-06 21:25:52

标签: javascript google-chrome google-chrome-extension

无论我做什么,我似乎无法完成这项工作。让我演示一个非常简单的示例扩展。这是manifest.json

{
  "manifest_version": 2,

  "name": "Sample Of Content Script",
  "description": "Changes the background of a page pink",
  "version": "1.0",

  "content_scripts": [
    {
      "matches": [ "<all_urls>" ],
      "js": [ "changer.js" ]
    }
  ],

  "permissions": [
    "webNavigation"
  ],

  "background": {
    "scripts": [ "background.js" ]
  }
}

请注意,我的content_scripts条目与all_urls匹配,(根据Google documentation)应与file:///个网址匹配。

background.js

(function (chrome) {
    'use strict';

    chrome.webNavigation.onCompleted.addListener(function (details) {
        chrome.tabs.sendMessage(details.tabId, {
            action: 'changeBackground',
            color: 'pink'
        });
    });

})(chrome);

changer.js(内容脚本):

(function (chrome) {
    'use strict';

    chrome.runtime.onMessage.addListener(function (request) {
        if (request.action !== 'changeBackground') { return; }
        document.body.style.background = request.color;
    });

})(chrome);

此扩展程序已在Chrome网上应用店中发布,因此您可以查看结果:

https://chrome.google.com/webstore/detail/sample-of-content-script/bkekbfjgkkineeokljnobgcoadlhdckd

这是一个非常简单的扩展。导航到一个页面,它将页面的背景变为粉红色。不幸的是,它不适用于任何file:///个网址。 changer.js脚本未加载到页面中,没有任何反应。

额外信息

  • 开发人员模式中作为解包扩展程序运行时,实际似乎正常工作。从文件系统加载的页面变为粉红色。
  • 我尝试使用chrome.tabs.executeScript()而不是将脚本放入清单中。这以一种更明显的方式失败,说我没有请求权限来修改清单中的file:///网址。
  • 我将"file:///*/*"添加到permissions的{​​{1}}部分。这似乎适用于manifest.json,但Chrome网上应用店拒绝了该扩展程序,并表示不允许chrome.tabs.executeScript()权限。
  • 我恢复了file:///中的content_script部分,并尝试将manifest.json添加到清单中的"file:///*/*部分。同样,这在开发版本中有效,但当我将其上传到Chrome网上应用店然后安装它时,它无效。

1 个答案:

答案 0 :(得分:3)

<all_urls>确实涵盖file://方案,但必须在扩展程序列表中手动激活。

如果某个扩展程序具有涵盖file://计划的权限,则会在“隐身允许”旁边显示“允许访问文件网址”复选框。用户必须手动启用;在解释过程后,您可以通过创建包含预配置URL的选项卡来提供帮助:

chrome.tabs.create({url: "chrome://extensions/?id=" + chrome.runtime.id});