2016-08-24 143 views
2

我开始用Chrome扩展的发展,并有一对夫妇的关于发展过程中的扩展安装/更新流程和测试问题:Chrome扩展更新流程

  1. 与扩展更新后的背景剧本,会发生什么呢铬执行后台脚本重新加载?
  2. 扩展更新后内容脚本是否与后台脚本分离?
  3. 如果在后台脚本中有一个onInstalled事件处理程序,那么当chrome更新扩展时(该事件处理程序分离,并且更新完成时,新处理程序被附加,然后执行或执行其他一些流程),该事件处理程序会发生什么情况? ?
  4. 有没有办法在开发过程中模拟更新过程,以便调试更新过程中发生的事件,例如在本地服务器上托管扩展并从那里更新?
  5. 在哪里寻找关于这个主题的文档以及类似文章,铬源代码是否正确或者至少是出发点?

谢谢!

+0

请参阅标记此问题的标签[tag:google-chrome-extension]?有一个信息[链接](https://stackoverflow.com/tags/google-chrome-extension/info) –

回答

4
  1. 扩展更新后的背景脚本会发生什么,Chrome是否执行后台脚本重装?

的行为取决于你是否有一个处理程序,注册chrome.runtime.onUpdateAvailable event是否您的扩展有着执着的背景页面或活动页面。

  • 如果你有一个持续的背景页:
    • 如果您处理此事件,并呼吁chrome.runtime.reload(),延长再次被加载之前卸载,然后更新。
    • 如果您处理此事件并且不呼叫chrome.runtime.reload(),那么更新将仅在下次重新载入扩展时适用 - 可能是下一次完整的浏览器重新启动。
    • 如果你根本没有处理这个事件,那么这个扩展将立即被卸载并被更新。
  • 如果你有一个非持久性活动页面:
    • 如果您处理此事件,并呼吁chrome.runtime.reload(),延长再次被加载之前更新。
    • 如果您没有拨打chrome.runtime.reload()或根本没有处理该事件,Chrome会在下一个事件页面卸载时更新扩展程序。

没有办法以编程方式防止一次更新后台页面被卸载无论出于何种原因。

  1. 扩展更新后,内容脚本是否从后台脚本中分离出来?

是的,它不漂亮。当使用Chrome API提供不一致的错误时,它们会进入“孤立”状态(有些什么都不做,有些会触发异常),但仍然在运行 - 例如,任何DOM事件侦听器都会触发。

因此,如果你想要的内容脚本,再立即开始工作,你的工作是:

  • 进样编程脚本在现有的选项卡,而不进行一个假设,即它没有前执行:清理第一,如果必要。
  • 确保孤立副本停止执行:或者注意旧副本中的孤立副本,或者从新副本中广播DOM事件。

约WebExtensions重要提示:火狐,Chrome的不同,总是重新注入负载的内容脚本到匹配清单条目页面。确保考虑到这一点。

有几个问题覆盖了这个;例如:

  • 如果有一个onInstalled事件处理程序在后台脚本,如何处理该事件发生当chrome更新扩展(这个事件处理程序是分离的,并且当更新完成时,新的处理程序被附加,然后执行或者其他一些流程是行使)?
  • 由于而背景页上的卸载的更新仅发生,没有复杂的逻辑;它只会在details.reason == "update"之后在第一次加载分机时触发。一定要在脚本加载时(例如在顶级代码中)同步注册处理程序,否则您可能会错过该事件 - 通常这只涉及事件页面,但我怀疑这也是重要的。

  • 有没有办法从那里发展的过程中,以模拟更新过程中,为了在更新过程中发生的调试事件,例如一些地方的服务器上托管扩展和更新?
  • 可悲的是,这是不再可能了我所知,除非你可以使用Enterprise Policy install。你最好的选择是在CWS中有一个扩展名为Private。

    在某种程度上,在对已解包的扩展进行一些更改后按下“重新加载”可模拟更新过程中发生的情况 - onInstalled事件除外。

  • 哪里搜索在这样和类似主题的文档,是铬源代码在正确的地方或至少起点?
  • 那么..有关详细问题Chromium代码当然是权威的来源。你也应该搜索StackOverflow,因为这里已经有相当丰富的知识。最后,官方文档提供了大量信息,即使它并不立即显现 - 例如chrome.runtime API docs