如何在后台获取chrome扩展程序的内容脚本?

时间:2016-01-17 07:02:30

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

这是我的package.json,但我的background.js没有在后台运行。我已经尝试了一段时间不同的事情了,并且还没有能够解决这个问题。在此先感谢您的帮助,

CREATE OR REPLACE FUNCTION colums_to_array(text)
RETURNS text[] AS $$
    SELECT ARRAY(SELECT column_name::text
                    FROM information_schema.columns
                   WHERE table_name = $1::name)
$$ LANGUAGE sql;

postgres=# SELECT colums_to_array('foo');
 colums_to_array  
------------------
 {log_time,xx,yy}

2 个答案:

答案 0 :(得分:2)

你应该将content_script放在背景之外,比如

"background": {
  "scripts": [
    "background.js"
  ],
  "persistent": true
},
"content_scripts": [
  {
    "matches": ["<all_urls>"],
    "js": ["background.js"]
  }
],

正如@minj所提到的,您应该删除background_page属性。 (您要么使用它,要么使用background

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

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

您应该将后台页面视为附加页面(您可以通过转到chrome://extensions/并点击扩展程序上的background page直接访问该页面),与浏览器中打开的标签分开。例如,您无法从后台页面访问浏览器中正在查看的页面的dom元素。

例如,当您重新加载普通页面(与上面提到的bg页面相对)时,不会刷新bg页面及其变量。它们只是两个不同的标签。

然而,内容脚本只是在匹配content_scripts.matches的页面中加载的脚本,就好像它们是从页面本身加载的一样。它们不会在页面之间存在,也不会共享信息。

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

答案 1 :(得分:1)

删除background_page,因为它会覆盖background。你只能使用其中一种,而不是两种。

或者,通过常规background.html代码将脚本添加到script文件中:

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