自定义 JSAPI 时,interceptEvent
和 handleEvent
有什么区别?
解答:如果您要监听容器的其他事件,写在 interceptEvent
里;如果事件只是您自己处理的,写在 handleEvent
里,返回 true 就行。
如果返回 true,事件将停止传递,如果返回 false,事件将继续传递到其他插件。
自定义 JSAPI 时,已经在 config.setEvents("event");
添加了事件,为什么还要在插件的onPrepare
里添加一次事件?
解答:因为容器的插件是懒加载的,即在页面创建的时候加载。通过外部的 config.setEvents
来注入要监听的事件名称,当真正有 JS 调用的时候,才会去实例化对应的插件对象。真正实例化的插件的事件分发用的是插件内 onPrepare
的事件。所以,要确保 config.setEvents("event")
的事件和内部 onPrepare
的事件保持一致。
自定义 JSAPI 插件注册的 page、session、service 三者有什么区别?
解答:page 对应一个 webview。session 对应 mPaaS 应用的一个 App 对象。service 是全局的一个单例。
如果注册为 page 级别,每次创建 WebView 都会创建一个插件实例,对应的插件的 onRelease 在 WebView 销毁时回调。
如果注册为 session 级别,每次创建一个 App 对象都会创建一个插件。
如果注册为 service 级别,全局只创建一次插件,在第一次打开容器的时候创建。
验签是验证离线包的来源吗?还是会做完整性校验?
解答:在离线包发布平台,如果您配置了签名私钥,平台下发的 amr 文件就会带上离线包的签名信息(通过私钥对离线包的 hash 值加密后得到的密文)。验签的时候会使用在项目中预置的公钥进行签名的验证(解密上一步的密文得到 hash 值,本地计算离线包的 hash,判断两者是否相同)。
该过程保证了既保证了离线包的内容完整,也保证了离线包的来源正确。
打开离线包时进度条无法隐藏?
解答:这种情况可能是由于资源离线失败,页面 fallback 到了线上模式,在 fallback 模式下面 H5 容器强制限制进度条,无法通过设置 SHOW_PROGRESS
启动参数来隐藏页面加载进度条。