Javascript 如何获得chrome扩展';要在后台显示的内容脚本?

Javascript 如何获得chrome扩展';要在后台显示的内容脚本?,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,这是我的package.json,但我的background.js没有在后台运行。我已经尝试了一段时间不同的事情,但一直没有弄明白。提前感谢您的帮助 { "manifest_version": 2, "name": "Focus", "version": "1.9.3", "description": "Block distracting websites and get inspired to focus on what's important", "background_

这是我的package.json,但我的background.js没有在后台运行。我已经尝试了一段时间不同的事情,但一直没有弄明白。提前感谢您的帮助

{
  "manifest_version": 2,
  "name": "Focus",
  "version": "1.9.3",
  "description": "Block distracting websites and get inspired to focus on what's important",
  "background_page": "background.html",
  "icons": {
    "16": "inspirelogo16.png",
    "48": "inspirelogo48.png",
    "128": "inspirelogo128.png"
  },
  "browser_action": {
    "default_icon": "inspirelogo19.png",
    "default_title": "Inspire Router",
    "default_popup": "/pages/popup.html"
  },
  "permissions": [
    "background",
    "notifications",
    "tabs",
    "<all_urls>",
    "webRequest",
    "*://*.google.com/"
  ],
  "background": {
    "scripts": [
      "background.js"
    ],
    "content_scripts": [
      {
        "matches": ["<all_urls>"],
        "js": ["background.js"]
      }
    ],
    "persistent": true
  },
  "options_page": "/pages/fieldpage.html",
  "content_security_policy": "script-src 'self' 'unsafe-eval' chrome-extension://bjmcjeffnloaojffcbaekmcokegnejlf/pages/inspire.html http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js https://ssl.google-analytics.com/ga.js http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js https://connect.facebook.net https://www.facebook.com https://chrome.google.com https://chrome.google.com; object-src 'self'"
}
{
“清单版本”:2,
“名称”:“焦点”,
“版本”:“1.9.3”,
“描述”:“阻止分散注意力的网站,并获得灵感专注于重要的内容”,
“背景页面”:“background.html”,
“图标”:{
“16”:“inspirelogo16.png”,
“48”:“inspirelogo48.png”,
“128”:“inspirelogo128.png”
},
“浏览器操作”:{
“默认图标”:“inspirelogo19.png”,
“默认标题”:“激励路由器”,
“默认弹出窗口”:“/pages/popup.html”
},
“权限”:[
“背景”,
“通知”,
“标签”,
"",
“网络请求”,
“*:/*.google.com/”
],
“背景”:{
“脚本”:[
“background.js”
],
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“background.js”]
}
],
“持久”:正确
},
“选项页面”:“/pages/fieldpage.html”,
“内容安全策略”:"脚本src“self”“unsafe eval”chrome-extension://bjmcjeffnloaojffcbaekmcokegnejlf/pages/inspire.html http://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js https://ssl.google-analytics.com/ga.js http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js https://connect.facebook.net https://www.facebook.com https://chrome.google网站https://chrome.google.com;对象src“self”
}

您应该将内容脚本置于背景之外,如

"background": {
  "scripts": [
    "background.js"
  ],
  "persistent": true
},
"content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["background.js"]
  }
],
“背景”:{
“脚本”:[
“background.js”
],
“持久”:正确
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“background.js”]
}
],
正如@minj所提到的,您应该删除
background\u页面
属性

此外,后台运行在自己的页面上,而不是在浏览器中看到的页面上。您可以找到它

如果您希望在bg和内容脚本中都可以访问脚本,例如具有共享函数的utils.js文件,可以将其添加到
background.scripts
content\u scripts.js
数组中

您应该将背景页面视为一个附加页面(您可以通过转到
chrome://extensions/
并单击分机上的
背景页
),与浏览器中打开的选项卡分开。例如,您无法从背景页访问浏览器中正在查看的页面的dom元素

例如,当你重新加载一个普通页面(与上面提到的bg页面相反)时,bg页面及其变量不会刷新。它们只是两个不同的选项卡

但是,内容脚本只是加载到与
内容\u脚本匹配的页面中的脚本。匹配的
,就好像它们是从页面本身加载的一样。它们不会在页面之间持久存在,也不会共享信息


您可能希望与dom元素交互并拥有一个持久的bg脚本。为此,您使用消息传递协议,使内容脚本和bg页面之间异步。我通常使用bg页面作为持久控制器,从内容脚本获取信息并向其发送订单。

您应该将内容\背景之外的脚本,如

"background": {
  "scripts": [
    "background.js"
  ],
  "persistent": true
},
"content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["background.js"]
  }
],
“背景”:{
“脚本”:[
“background.js”
],
“持久”:正确
},
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“background.js”]
}
],
正如@minj所提到的,您应该删除
background\u页面
属性

此外,后台运行在自己的页面上,而不是在浏览器中看到的页面上。您可以找到它

如果您希望在bg和内容脚本中都可以访问脚本,例如具有共享函数的utils.js文件,可以将其添加到
background.scripts
content\u scripts.js
数组中

您应该将背景页面视为一个附加页面(您可以通过转到
chrome://extensions/
并单击分机上的
背景页
),与浏览器中打开的选项卡分开。例如,您无法从背景页访问浏览器中正在查看的页面的dom元素

例如,当你重新加载一个普通页面(与上面提到的bg页面相反)时,bg页面及其变量不会刷新。它们只是两个不同的选项卡

但是,内容脚本只是加载到与
内容\u脚本匹配的页面中的脚本。匹配的
,就好像它们是从页面本身加载的一样。它们不会在页面之间持久存在,也不会共享信息


您可能希望与dom元素交互并拥有一个持久的bg脚本。为此,您可以使用消息传递协议,使内容脚本和bg页面之间异步。我通常使用bg页面作为持久控制器,从内容脚本获取信息并向其发送订单。

删除
backgr因为它覆盖了
背景
。您只能使用其中一个,不能同时使用两个

或者,通过常规的
script
标记将脚本添加到
background.html
文件:

<script type="application/x-javascript" src="/background.js"></script>

删除
background\u页面
,因为它会覆盖
background
。您只能使用其中一个,不能同时使用两个

或者,通过常规的
script
标记将脚本添加到
background.html
文件:

<script type="application/x-javascript" src="/background.js"></script>


谢谢,那么你如何让js文件在浏览器的后台运行,而不管是哪一页。@YoniBinstock和脚本标记,像往常一样。查看我的答案。更新响应,是的,删除我没有捕获的
后台页面