1

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

tabs.executeScript 期间出错:无法访问 url“chrome-extension://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"
      }
    ]
}

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

//更新

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

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

我实际上没有任何完整编写的页面,因为它们都不起作用,所以我无法测试在消息传递方面什么是有效的。

4

2 回答 2

1

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

于 2013-01-29T23:00:37.050 回答
0

代码中的问题

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

建议

  • 为什么不添加enter_content.js到打开的页面正在使用的脚本列表中,而不是无效注入。
于 2013-01-28T02:55:45.267 回答