>我有一个内容脚本,里面有很多函数,我希望能够将这些功能拆分成其他脚本
从内容脚本调用其他脚本是否需要任何魔法
我的清单包含两个脚本
"content_scripts": [
{
"matches": [
"*://*/*"
],
"js": [
"content.js",
"other.js"
]
}
]
我的内容脚本工作正常
但是,如果我将一个函数放在另一个.js文件中并逐步执行它,我在 other.js 中引用的任何内容都是未定义的
这里有什么我应该知道的吗?
编辑:
这只是一个简单的例子,Test 函数应该在内容脚本加载时运行
内容脚本.js
Test();
其他.js;
function Test(){
return true;
}
谷歌告诉我未捕获的引用错误,未定义测试
根据内容脚本上的文档:
js:要注入到匹配页面中的 JavaScript 文件列表。它们按照它们在此数组中出现的顺序注入。
在您的情况下,content.js
将首先注入并尝试在加载other.js
之前执行other
的Test()
函数)。
请注意,根据您的清单,两个脚本都将在"document_idle"加载,因此即使content.js
已注册Test()
在加载页面后运行的调用,它仍应立即运行(因为页面已加载。
如果您希望在加载页面内容之前注入脚本,请修改清单:
"content_scripts": {
...
"run_at": "document_start"
只是为了给任何寻找有关其他脚本的答案的人添加更多内容,以及扩展脚本访问的其他方法。
您可以使用 chrome.extension 方法以及 chrome.runtime 通信方法访问扩展的其余脚本。
-
若要从扩展中获取所有脚本的数组,可以使用 extension.getViews 方法。
-
您还可以使用 getBackgroundPage 方法获取后台脚本或特定背景脚本。
-
另一种选择是使用消息传递通过 runtime.sendMessage 方法传递脚本的内容,并使用另一个脚本上的事件侦听器来侦听 runtime.onMessage,允许脚本从发送脚本接收数据。
-
除了上一个选项之外,您还可以使用消息传递来接收来自另一个活动扩展的脚本,该扩展通过 runtime.sendMessage 发送,但这次使用带有 runtime.onMessageExternal 的事件侦听器(不能在内容脚本中使用)。
我希望这对某人有所帮助,就像它早些时候对我有帮助一样。