chrome app webview事件定义和顺序

 mobiledu2502870743 发布于 2023-01-09 17:15

我正在开发一个Chrome应用程序,其中包含用于显示Web内容的webview标记.

我无法理解时contentload,loadcommitloadstop事件实际上是在网页视图加载页面的过程中开火.

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

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

1 个回答
  • 更新:loadstop每次提交的帧级负载数从非零转换为零时,都会发生事件.在实践中,这通常是一次性的loadcommit.有关详细信息,请参阅更新

    loadcommit,contentloadloadstop你从网页视图内导航(例如,点击链接),并设定观察事件webview.src的属性大致相同,但都依赖于新的URL是否是指当前加载的文件.这些事件取决于浏览器导航真实文档加载之间的差异.请注意,在您的问题的上下文中,"浏览器"是webview.

    摘要

    loadcommit事件触发的顶层文档(中的每一个的浏览器导航loadcommit.isTopLevel=true),以及内的任何帧/ iframe中(loadcommit.isTopLevel=false).

    loadstop事件触发每次帧级负载(或顶层帧的内帧/ iframe中)的数量的转变从非零到零.当动态加载帧时(通常是广告的情况),这大致相当于每次一次loadcommit.

    每个顶级文档加载都会contentload触发一个事件(通常在其关联loadstop事件之前); 这不包括框架/ iframe文档加载和不加载新文档的顶级浏览器导航.

    细节

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

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

    loadstop事件触发每次帧级负载(或顶层帧的内帧/ iframe中)的数量的转变从非零到零.当动态加载帧时(通常是广告的情况),这大致相当于每次一次loadcommit.但是,如果未动态加载帧,则通常只有一个loadstop页面事件.

    一个contentload顶级文档加载完成时触发事件.这意味着在以下情况contentload下事件不会伴随loadcommit事件:

    loadcommit活动不适用于顶级框架,

    要么

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

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

    注意:以下示例动态加载其帧.因此,通常情况是每个都loadstop出现一个loadcommit,但这不能保证,因为如果在第一个内部框架加载完成之前提交了第二个内部框架加载,则只有一个加载完成loadstop后才会启动.

    例1

    行动

    加载http://www.google.com.

    结果

    loadcommit.isTopLevel=true,contentload,loadstop

    说明

    这意味着加载一个没有额外帧/ iframe的页面.在loadstop事件发生之前,文档已准备就绪.这似乎是一般的情况,但我不知道它是否有保证.

    例2

    行动

    在http://www.google.com上,输入搜索词组并等待"即时搜索"以加载搜索结果.

    结果

    loadcommit.isTopLevel=true, loadstop

    说明

    这构成了页面导航而不加载新文档.请注意,URL的锚点部分是更改的.

    例3

    行动

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

    结果

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

    说明

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

    2023-01-09 17:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有