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

Javascript 将JS注入本地扩展文件(在新选项卡中),javascript,google-chrome-extension,Javascript,Google Chrome Extension,我使用chrome.tabs.create()生成一个新选项卡,该选项卡将转到chrome扩展中的一个页面。 然后,我想使用chrome.tabs.executeScript()将一个JavaScript文件注入到新选项卡中(输入_content.js)。然而,当我这样做时,我会遇到一个错误 tabs.executeScript期间出错:无法访问url的内容 “铬-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/enter.html". 扩展清单必须请求

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

tabs.executeScript期间出错:无法访问url的内容 “铬-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"
      }
    ]
}
{
“清单版本”:2,
“名称”:“myExtension”,
“版本”:“1.0”,
“权限”:[
“上下文菜单”,
“标签”,
"*://*/*"
],
“背景”:{
“脚本”:[“background.js”]
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“generic_content.js”],
“所有框架”:正确,
“运行时间”:“文档开始”
}
]
}
我需要添加什么才能将代码注入到选项卡中

//更新

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

我尝试过稍微编辑CSP,但没有任何效果。我添加了
“内容安全策略”:“脚本src'self'chrome”-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/;对象src“self”
以及在末尾添加特定页面

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

代码中存在的问题
  • 不能将脚本注入任何扩展页
  • chrome-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/*
    是无效的模式,文档不会在此模式上更新
  • 您是否正在从与chrome.*API相关的部分调用
    chrome.extension.getBackgroundPage()
    ,CSP错误是导致此问题的原因
建议
  • 为什么不将
    enter_content.js
    添加到打开的页面正在使用的脚本列表中,而不是添加无效的注入

我解决了这个问题,使用
addEventListener()
连接到按钮上,以免妨碍默认CSP。

generic_content.js被注入到一个选项卡中,我知道它是这样的。我希望将通用内容注入到每个选项卡中。我希望将enter_content.js注入此特定选项卡如果页面带有扩展名为什么要将内容脚本注入其中,只需将脚本添加到页面即可。顺便问一下,你有没有尝试添加
chrome-extension://adcfbbpepclgchodmdfbijpjhkgcamcg/*
在权限中?@uzairvarooq是的,我尝试将其添加到权限中-它说匹配的格式不正确-以及为其添加额外的内容脚本,但都不起作用。我还将该页面添加到web_可访问列表中,但没有任何帮助。我之所以想将其注入,而不仅仅是将代码放在页面上,是因为我希望能够从后台脚本与页面对话。默认安全策略不允许这样做,我真的不想更改它。@wezternator您可以使用
chrome.extension.getBackgroundPage()
chrome.extension.getViews(fetchProperties)在扩展页和背景页之间进行通信
“为什么不将enter_content.js添加到打开的页面正在使用的脚本列表中,而不是添加无效的注入。”我不确定您在这里的确切意思。您的意思是将
enter_content.js
添加到HTML页面上的脚本标记中吗如果是这样,那就没关系了,仍然违反了CSP:(如果你的意思是把它放在舱单的其他地方,具体在哪里?谢谢@Sudarshan@wezternator:是的,我的意思是将
标记添加到HTML页面,为什么它会显示CSP,您在
enter_content.js中的内容是什么
它使用chrome.extension.sendMessage()将页面上输入的信息传递回后台脚本。或者这就是我希望它至少要做的@Sudarshan@wezternator:你能通过编辑你的问题来输入你问题的相关代码吗?这样我就能更好地理解它。请在问题的底部@sudarshan添加更多信息