JsBridge 是一些声明的 js 语句和自定义事件,通过客户端来注入然后触发 js 里的自定义事件,来告知 H5 页面注入完毕。
(以 android 说明)加载一个网页的方式: webView.loadUrl("http://www.google.com/")。
现状与问题:
在onPageFinished 回调里才注入 JsBridge 并触发事件。
onPageFinished 可看作页面 load 完(即页面有 load 事件),但这样如果页面有太多的资源(外部样式、图片等),可又不通过 js 动态处理的话,岂不是打开一个 webview,js 与 app 交互要等到 load 完才可以进行。
更希望在页面 DOMContentLoaded后就可以进行交互。即提前注入 JsBridge 的声明。
设想与目的:
因为不太懂 app 开发,有以下设想:
JsBridge 里有原生 DOMContentLoaded 和 load 事件等的声明,只要提前注入页面,页面在加载过程中就会触发对应的事件,从而可以提前与 app 交互( DOMContentLoaded 后)。所以 webView.loadUrl 的时候,app 往页面的 head 里插入这段 JsBridge 声明就可以。
可问题是以怎样的时机注入 JsBridge:
- ~~onPageFinished 时机:整个页面 load 完,才能交互,太迟了~~ (目前方案,但 load 后太迟)
- onPageStarted 时机?: 貌似不行,页面加载前,无法注入 (客户端尝试了确实不可)
- onReceivedTitle 时机?:webvieview 获得 ttile 说明可以往 head 注入 js (待尝试)
一般情况,前端页面只需要监听 DOMContentLoaded 事件就可以,但这样要涉及到与 app 的交互,而且 JsBridge 由 app 注入,所以这里需要 app 有 DOMContentLoaded 这样一个时机来告知前端页面页面已经解析完,并且可以交互。所以这样可以做到吗?或者有什么更好的方案?
涉事不深,望各位前辈多多指教。
(描述有点长,主要想让问题更详细一点。不过这里先感谢各位花时间看我的问题啦~)