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