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:
一般情况,前端页面只需要监听 DOMContentLoaded 事件就可以,但这样要涉及到与 app 的交互,而且 JsBridge 由 app 注入,所以这里需要 app 有 DOMContentLoaded 这样一个时机来告知前端页面页面已经解析完,并且可以交互。所以这样可以做到吗?或者有什么更好的方案?
涉事不深,望各位前辈多多指教。
(描述有点长,主要想让问题更详细一点。不过这里先感谢各位花时间看我的问题啦~)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.