Chrome应用程序消息传递和'Vs. load()计时

Chrome App messaging and 'loadstop' vs. .load() timing

本文关键字:load Vs 计时 应用程序 消息传递 Chrome      更新时间:2023-09-26

我正在开发一个Chrome应用程序与webviews。用于webview的页面也可以在普通浏览器中运行。如果在webview中,页面发送消息到主应用程序,但显然他们需要首先从应用程序获得消息,以便知道将消息发送到哪里。

没问题-主应用程序发送一个消息,只要它看到一个'loadstop'事件,告诉页面发送消息到哪里。如果一个页面不在webview中,那么它永远不会得到这个消息。

问题是,我需要知道当一个页面应该停止等待消息,并假设它不是在一个webview。

什么时候'loadstop'发生,相对于页面中的事件,如jQuery的。ready或。load?是否有一种方法来捕获或触发一个事件,保证发生在'loadstop'之后,可能会在主应用程序中看到,并由webview的JavaScript发送和接收消息。

什么时候'loadstop'发生,相对于页面中的事件,如jQuery的。ready或。load?

根据loadstop事件的文档:

当来宾页面的所有帧级加载(包括其所有子帧)完成时触发。这包括当前文档内的导航以及子框架文档级加载,但是包含异步资源加载。

这表明它更类似于jQuery的.ready(),它在加载DOM树之后执行,但在等待资产(.css, .js)下载之前。

关注文档页;自两周前以来,它已经有了很大的改善。


是否有一种方法来捕获或触发一个事件保证发生后'loadstop'可能在主应用程序中看到,并由webview的JavaScript发送和接收的消息?

清单。json声明你的my-app-main.js后台脚本(和你的webview权限),它启动你的my-webview-wrapper.html,其中包括你的<webview>标签,还内联一些javascript(或来源一个my-webview-wrapper.js文件),通过onload函数为你的webview分配事件监听器,如下:

onload = function() {
  webview = document.getElementById("the-id-attribute-of-my-webview");
  webview.addEventListener("<EVENT>", function() {
    // the cool stuff you want to do
  }
}

<EVENT>可以是我链接的文档中列出的任何webview DOM事件(包括loadstop)。你的主应用不应该关心这些发生的事情。(异步!javascript !它的魔法!)

如果你仍然感到困惑,就在GitHub上浏览一下Google的webview示例。