android Js交互進階版

混合開發越來越常見,最近做了一個大批量的混合開發,發現簡單的互調方法早已滿足不了需求,摸爬滾打的踩坑過後,記錄一下幾個問題,順便幫助尚處水深火熱的同行排憂解惑。

1.數據傳遞
①. 如果是想傳的只有一個值,那麼比較簡單,直接 webview.loadUrl(“javascript:login(“+user.getName+”)”);
②.想要在.jsp中使用很多安卓的數據,或者一個實體的話,可以使用 @JavascriptInterface標籤和 webview.addJavascriptInterface(user, “user”); 直接讓js使用一個實體
@JavascriptInterface:在一個class文件的方法上表上這個標註,表示這個方法在js中是可以直接通過對象調用的;
webview.addJavascriptInterface(user, “user”); :將安卓對象傳遞個js;
2.javascript:history.go(-1)無效
開始時隨大流在
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webview.load(url);
return true;
}
});
加入了 webview.load(url);防止打開自帶瀏覽器加載鏈接,但是有時候你會發現js裏面的回退方法竟然在手機上不管用了,解決是刪掉load(url) 再return false ;
3.alert()在手機上不顯示
調試jsp頁面常用alert()辨別是否執行,但是手機端不會顯示,原因是webview 不支持,需要內嵌瀏覽器內核,好在谷歌的瀏覽器內核可以直接用: webview.setWebChromeClient(new WebChromeClient());

4.支持使用localStorage
localStorage:進階的session
webview設置支持
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheMaxSize(1024 * 1024 * 6);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);

安卓小白,多包涵;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章