Chrome 扩展程序引用/调用内容脚本中的其他脚本函数
Chrome Extension referencing/calling other script functions from a content script
>我有一个内容脚本,里面有很多函数,我希望能够将这些功能拆分成其他脚本
从内容脚本调用其他脚本是否需要任何魔法
我的清单包含两个脚本
"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 的事件侦听器(不能在内容脚本中使用)。
我希望这对某人有所帮助,就像它早些时候对我有帮助一样。
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- 网页上失败的javascript会导致所有其他脚本失败
- 在BoilerplateJS浏览器加载所有脚本(在其他模块中),而不考虑激活的模块
- 如果其他是咖啡脚本
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- Selenium异步脚本在自己的线程中阻塞其他脚本
- 编写脚本以关闭其他选项卡或浏览器
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- 如何测试jQuery和某些其他脚本是否已加载
- 不要为机器人(谷歌和其他)加载JS脚本以获得更好的性能
- 如何在访问其他url时在nodewebkit中注入脚本
- JS脚本由1个元素调用,而不是由其他3个元素调用
- 长轮询脚本会停止所有其他脚本
- 我用脚本创建了一个按钮.我可以通过点击按钮调用其他函数吗?我这样做,但失败了
- 在ASP中调用HTML以调用其他脚本
- 如果其他脚本'装载顺序未知
- 有没有一个简单的脚本可以向美国/加拿大游客显示脚本1,向其他游客显示脚本2
- Pjax.页面上的其他JS脚本不会;不起作用
- jquery破坏了其他脚本
- Meteor脚本确保在其他一切之前执行(在客户端上)