我有一个包含很多功能的内容脚本,我希望能够将这些功能拆分成其他脚本
是否需要从内容脚本调用其他脚本
我的清单包含两个脚本
"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,测试未定义
答案 0 :(得分:6)
根据 Content Scripts 上的文档:
js :要注入匹配页面的JavaScript文件列表。它们按照它们出现在这个数组中的顺序注入。
在您的情况下,首先会注入content.js
,并在加载other
之前尝试执行Test()
的{{1}}函数。
请注意,根据您的清单,两个脚本都将加载到“document_idle”,因此即使other.js
已经注册了在加载页面后运行content.js
的调用,它仍应该立即运行(因为页面已经加载。
如果您希望在加载页面内容之前注入脚本,请修改清单:
Test()
答案 1 :(得分:2)
只是为寻找有关其他脚本的答案的任何人添加更多内容,以及其他扩展脚本访问方法。
您可以使用chrome.extension方法以及chrome.runtime通信方法访问其余扩展程序的脚本。
要从扩展程序获取所有脚本的数组,您可以使用extension.getViews方法。
您还可以使用getBackgroundPage方法获取后台脚本或特定后台脚本。
另一种选择是使用message passing使用runtime.sendMessage方法传递脚本的内容,并使用另一个脚本上的事件侦听器来监听runtime.onMessage允许用于从发送脚本接收数据的脚本。
除了上一个选项之外,您还可以使用message passing从另一个使用runtime.sendMessage发送的活动扩展程序接收脚本,但这次使用的事件监听器{{3而不是(不能在内容脚本中使用)。
我希望这对某人有所帮助,就像它早些时候帮助过我一样。