我开始使用chrome扩展开发,并且在开发过程中有一些关于扩展安装/更新流程和测试的问题:
谢谢!
答案 0 :(得分:4)
- 扩展程序更新后后台脚本会发生什么情况,Chrome是否会执行后台脚本重新加载?
醇>
行为取决于您是否拥有注册chrome.runtime.onUpdateAvailable
event的处理程序以及您的扩展程序是否具有持久性背景页面或事件页面。
chrome.runtime.reload()
,则会在再次加载之前卸载扩展程序并进行更新。chrome.runtime.reload()
,则更新仅适用于下次重新加载扩展程序时 - 可能是下次完整浏览器重新启动。chrome.runtime.reload()
,则会在再次加载之前更新扩展程序。chrome.runtime.reload()
,或根本没有处理此事件,则Chrome会在下一个“活动”页面卸载时更新该扩展程序。无论出于何种原因,一旦后台页面被卸载,就无法以编程方式阻止更新。
- 扩展程序更新后内容脚本是否与后台脚本分离?
醇>
是的,它并不漂亮。他们进入了一个孤儿"当使用Chrome API时出现不一致的错误(有些不做,有些触发异常),但仍然在运行 - 例如,任何DOM事件监听器仍然会触发。
因此,如果您希望内容脚本能够立即再次运行,那么您的工作就是:
关于WebExtensions的重要说明:与Chrome不同,总是将内容脚本重新加载到与清单条目匹配的网页中。请务必考虑到这一点。
有一些问题涵盖了这一点;例如:
- 如果后台脚本中有
醇>onInstalled
事件处理程序,当chrome更新扩展时该事件处理程序会发生什么(此事件处理程序已分离,更新完成时,新处理程序已附加,然后执行或其他一些流程被行使)?
由于更新只能在卸载后台页面时发生,因此没有复杂的逻辑;它只会在details.reason == "update"
之后在扩展的第一次加载时触发。确保在脚本加载时同步注册处理程序(例如在顶级代码中),否则您可能会错过事件 - 通常这只涉及事件页面,但我怀疑它在这里也很重要。
- 有没有办法在开发过程中模拟更新过程,以便调试更新过程中发生的事件,例如在某些本地服务器上托管扩展并从那里更新?
醇>
可悲的是,除非您可以使用Enterprise Policy install,否则根据我的知识,这已不再可能。您最好的选择是将CWS中的扩展名发布为私有。
在某种程度上,按下"重新加载"对解压缩的扩展进行一些更改后,模拟更新期间发生的事情 - onInstalled
事件除外。
- 在哪里搜索关于此类和类似主题的文档,铬源代码是正确的位置还是至少是起点?
醇>
嗯..对于详细问题,Chromium代码当然是权威来源。您也应该搜索StackOverflow,因为这里已经积累了相当多的知识体系。最后,官方文档提供了大量信息,即使它不是立即显而易见的 - 例如chrome.runtime
API docs。