将JS注入本地扩展文件(在新选项卡中)

时间:2013-01-27 18:20:48

标签: javascript google-chrome-extension

我使用chrome.tabs.create()生成一个新标签,该标签转到Chrome扩展程序中的一个页面。 然后,我想使用chrome.tabs.executeScript()将JavaScript文件注入新选项卡(enter_content.js)。但是,当我这样做时,我遇到了错误

  

tabs.executeScript期间出错:无法访问url的内容   "铬 - 延伸://adcfbbpepclgchodmdfbijpjhkgcamcg/enter.html" ;.   扩展清单必须请求访问此主机的权限。

我的清单看起来像这样

{
    "manifest_version": 2,

    "name": "myExtension",
    "version": "1.0",

    "permissions": [
        "contextMenus",
        "tabs",
        "*://*/*"
    ],

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

    "content_scripts": [
      {
        "matches": ["<all_urls>"],
        "js": ["generic_content.js"],
        "all_frames": true,
        "run_at": "document_start"
      }
    ]
}

我需要添加什么才能将代码注入选项卡?

// UPDATE

为了澄清,我有一个上下文菜单,当点击它时会打开一个新选项卡并将其指向本地文件enter.html。页面只包含一个输入框和一个按钮。单击时,按钮使用chrome.extension.sendMessage()将输入框中的内容发送回后台脚本。但是看起来你不能将扩展中的脚本注入到页面中(这将允许它进行通信)也不能直接通过内联或单独的js文件包含enter.html代码中chrome命名空间内的任何内容因为这违反了默认的CSP,如果可能,我希望保持原样。

我尝试稍微编辑CSP但没有任何影响。我添加了"content_security_policy": "script-src 'self' chrome-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/; object-src 'self'" 以及最后添加特定页面。

我实际上没有任何完整的书面页面,因为它没有任何作用,所以我无法测试在消息传递方面有效的方法。

2 个答案:

答案 0 :(得分:0)

代码中的问题

  • 您无法将脚本注入任何扩展页面
  • chrome-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/*是无效模式,文档未在此更新。
  • 您是否从与C​​hrome相关的部分调用chrome.extension.getBackgroundPage()。* API,CSP错误是导致此问题的原因。

建议

  • 为什么不将enter_content.js添加到打开的页面使用的脚本列表中,而不是无效注入。

答案 1 :(得分:0)

我通过使用addEventListener()附加到按钮上来解决这个问题,以免妨碍默认的CSP。