5

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

从内容脚本调用其他脚本是否需要任何魔法

我的清单包含两个脚本

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

我的内容脚本运行良好

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

有什么我应该知道的吗?

编辑:

这只是一个简单的例子,Test 函数应该在 contentscript 加载时运行

内容脚本.js

Test();

其他.js;

function Test(){
  return true;
}

Google 告诉我未捕获的 ReferenceError,未定义测试

4

2 回答 2

12

根据有关内容脚本的文档:

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

在您的情况下,content.js将首先注入并尝试在加载之前执行other'sTest()函数)。other.js

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

"content_scripts": {
    ...
    "run_at": "document_start"
于 2013-10-31T22:44:37.950 回答
3

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

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

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

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

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

  4. 除了上一个选项之外,您还可以使用消息传递来接收来自另一个使用 runtime.sendMessage 发送的活动扩展的脚本,但这次使用带有runtime.onMessageExternal的事件侦听器代替(不能在内容脚本中使用)。

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

于 2016-11-30T09:03:43.840 回答