chrome app webview事件定义和顺序

时间:2014-06-11 20:53:10

标签: google-chrome webview google-chrome-app

我正在开发一个包含webview标记的Chrome应用,以显示网络内容。

我无法理解在网页浏览中加载网页的过程中contentloadloadcommitloadstop事件实际触发的时间。

1)当我可以期待这些事件发生时,有人可以描述(比文档更详细和更具背景)吗? 2)此外,当我/如果我更改webview的src(url)时会发生什么?这些事件的启动方式是否与webview的初始加载时(或者根本不同)或者与第一页的加载相同?

https://developer.chrome.com/apps/tags/webview

1 个答案:

答案 0 :(得分:5)

UPDATE :每次提交的帧级加载数从非零转换为零时,都会发生loadstop事件。在实践中,这通常是每个loadcommit一个。有关详细信息,请参阅更新的响应。

您在网页浏览中导航时观察到的loadcommitcontentloadloadstop事件(例如,点击链接)并设置webview.src属性大致相同,但两者都取决于新URL是否引用当前加载的文档。这些事件取决于浏览器导航正版文档加载之间的差异。请注意,在您的问题的上下文中,"浏览器"是webview。

摘要

  • 在顶级文档(loadcommit)内以及任何框架/ iframe(loadcommit.isTopLevel=true)内的每个浏览器导航都会触发loadcommit.isTopLevel=false个事件。

  • 每次帧级加载的数量(在顶级框架或内部框架/ iframe中)从非零转换为零时,都会触发loadstop事件。当动态加载框架时(通常是广告的情况),这大致相当于每loadcommit一次。

  • 每个顶级文档加载都会触发contentload事件(通常在其关联的loadstop事件之前);此排除框架/ iframe文档加载以及未加载新文档的顶级浏览器导航。

详细

您的浏览器完全可以导航到新位置而无需加载新文档。示例包括单击跳转到当前文档中某个位置的链接,以及AJAX工作流,其中开发人员使用a browser history API强制导航,同时加载某些异步提取的内容。当然,大多数浏览器导航确实会导致浏览器加载新文档;这构成了我所称的真正的文档加载

每个浏览器导航都会发生loadcommit个事件。这些事件是针对顶级文档中的每个导航以及文档中的每个框架/ iframe(以及框架/ iframe中的框架/ iframe等)触发的。这就是为什么在很多情况下,您会看到多个{ {1}}事件加载单个顶级文档。请注意,只有顶级loadcommit个事件有loadcommit;这也适用于isTopLevel=trueloadabortloadredirect个事件,但不是 loadstart个事件。

每次帧级加载(在顶级帧或内部帧/ iframe中)从非零转换为零时,都会触发loadstop事件。当动态加载帧时(通常是广告的情况),这大致相当于每次loadstop一次。但是,如果未动态加载帧,则通常页面只会有一个loadcommit事件。

顶级文档加载完成时会触发loadstop事件。这意味着contentload事件在contentload事件发生时会出现:

  • loadcommit事件不适用于顶级框架

  • loadcommit事件与不构成正版页面加载的浏览器导航相关联。

因此,监听loadcommit通常适用于每个顶级文档加载应该发生一次的操作(例如,将脚本恰好注入某些文档一次)。聆听contentload适合对#34;浏览器即将导航" (如果您想忽略内部框架/ iframe,请务必检查loadcommit)。聆听isTopLevel适合对浏览器完成导航"做出反应,但如果您对顶级活动感兴趣,请务必小心,因为loadstop属性并非如此; t出现在isTopLevel个事件中。

注意:以下示例动态加载其帧。因此,通常情况loadstop出现一个loadstop,但这不能保证,因为如果第二个内部帧加载在第一个之前提交完成后,只有一个loadcommit将在两个完成后触发。

示例1

动作

加载http://www.google.com

结果

loadstoploadcommit.isTopLevel=truecontentload

说明

这表示加载没有额外框架/ iframe的页面。在loadstop事件触发之前,该文档已准备就绪。这似乎是一般的情况,但我不知道它是否有保障。

示例2

动作

http://www.google.com,输入搜索词组,然后等待"即时搜索"加载搜索结果。

结果

loadstoploadcommit.isTopLevel=true

说明

这构成了不加载新文档的页面导航。请注意,URL的锚点部分会发生变化。

示例3

动作

加载http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_iframe

结果

loadstop,[多个loadcommit.isTopLevel=true,一个loadcommit.isTopLevel=false和多个contentload - 不一定按此顺序]

说明

这构成了加载具有多个内部框架的文档(除了样本iframe之外还有广告)。您将观察到loadstop事件的数量永远不会超过loadstop事件的数量(因为您无法在开始加载之前完成加载)。同样,在至少有一个loadcommit事件被触发之前,您几乎肯定会看到contentload事件被触发。