Android-JSNative交互的几种可行性方案H5白屏问题解决方式
在Android中可能因為業務場景需要,JS需要調用Native業務邏輯代碼,Native需要通知JS,也即需要實現JS和Native之間通信;
##Java通知JS方式:
WebView.load("javascrpt:method("+param+");");##JS通知Java有如下幾種方式
1、addJavascriptInterface
具體使用示例參見官網描述
但該方案存在版本兼容問題,在4.2版本以下系統上存在安全漏洞,JS能夠根據反射能訪問注入的對象公有域。當WebView包含惡意代碼時,攻擊者可以以意想不到的方式來控制宿主App,使用這種方式需要特別小心。一般不建議使用此種方式
參見Here
不能翻墻的可以看看這個
2、onJsPrompt
我們可以通過onJsPrompt這種方式來實現JS和Native之間交互。
每當JS調用prompt方法時Native的WebView所綁定的WebChromeClient的onJsPrompt方法會被觸發
我們看看官方的說明
大意是告訴Client去顯示一個提示框。如果返回true,WebView就會認為Client將要處理dialog并調用JsPromptResult合適方法(confirm/cancel)通知WebView;如果返回false,默認值將被返回給JS;方法默認返回false。
JS在調用prompt(message, defaultValue)方法時會傳遞2個參數給Native,分別對應onJSPrompt的第二、三個參數
我們只要和JS那邊達成一套協議
className: JS調用Native的全路徑名
methodName: JS調用Native具體方法
param: Native類方法名的入參
callback: Native調用JS的方法
Native從onJsPrompt方法接受到的message參數符合上面格式后,就可以知道調用Native哪個類哪個方法并且可以將Native產生的數據通過callback方式通知給JS,這是目前Native和JS之間交互的主流的通信方式。
示例代碼:
注意事項
- 返回值必須true,如果返回false,WebView會彈一個很丑的對話框,阻塞用戶體驗
- 在返回前必須調用confirm方法
- 傳遞給confirm的值必須是輕量級的數據
- onJsPrompt方法運行在WebView創建的線程中(一般是UI線程)
- onJsPrompt的操作不要過重
- 在Activity銷毀時避免JS的調用
##3、H5白屏的問題解決方式
- 如果JS和Native交互使用到onJsprompt方式請確保遵循上面注意事項
- 因為JavaScript是單線程,如果上面方式還是解決不了白屏問題,請讓H5同學使其JS調用放到后臺線程
總結
以上是生活随笔為你收集整理的Android-JSNative交互的几种可行性方案H5白屏问题解决方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何扩展Android富文本之Html标
- 下一篇: Android Lifecycle组件使