Chrome扩展程序从内容脚本引用/调用其他脚本函数

时间:2013-10-31 21:42:44

标签: javascript google-chrome-extension

我有一个包含很多功能的内容脚本,我希望能够将这些功能拆分成其他脚本

是否需要从内容脚本调用其他脚本

我的清单包含两个脚本

"content_scripts": [
  {
    "matches": [
      "*://*/*"
    ],
    "js": [
      "content.js",
      "other.js"
    ]
  }
]

我的内容脚本运行正常

但是如果我将一个函数放在other.js文件中并逐步执行它,那么我在other.js中引用的任何内容都是未定义的

这里有什么我应该知道的吗?

修改

这只是一个简单的例子,Test函数应该在contentscript load

上运行

contentscript.js

Test();

other.js;

function Test(){
  return true;
}

谷歌告诉我未被捕获的ReferenceError,测试未定义

2 个答案:

答案 0 :(得分:6)

根据 Content Scripts 上的文档:

  

js :要注入匹配页面的JavaScript文件列表。它们按照它们出现在这个数组中的顺序注入。

在您的情况下,首先会注入content.js,并在加载other之前尝试执行Test()的{​​{1}}函数。

请注意,根据您的清单,两个脚本都将加载到“document_idle”,因此即使other.js已经注册了在加载页面后运行content.js的调用,它仍应该立即运行(因为页面已经加载。
如果您希望在加载页面内容之前注入脚本,请修改清单:

Test()

答案 1 :(得分:2)

只是为寻找有关其他脚本的答案的任何人添加更多内容,以及其他扩展脚本访问方法。

您可以使用chrome.extension方法以及chrome.runtime通信方法访问其余扩展程序的脚本。

  1. 要从扩展程序获取所有脚本的数组,您可以使用extension.getViews方法。

  2. 您还可以使用getBackgroundPage方法获取后台脚本或特定后台脚本。

  3. 另一种选择是使用message passing使用runtime.sendMessage方法传递脚本的内容,并使用另一个脚本上的事件侦听器来监听runtime.onMessage允许用于从发送脚本接收数据的脚本。

  4. 除了上一个选项之外,您还可以使用message passing从另一个使用runtime.sendMessage发送的活动扩展程序接收脚本,但这次使用的事件监听器{{3而不是(不能在内容脚本中使用)。

  5. 我希望这对某人有所帮助,就像它早些时候帮助过我一样。