一、web前端
1.调用APP原生方法
①.第一种调用方法
const nativeOS = {
isAndroid() {
return /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent);
},
isIos() {
return /(Android)/i.test(navigator.userAgent);
},
isMobile() {
return this.isIos() || this.isAndroid();
}
};
if (nativeOS.isMobile()) {
var res = window.hello.getLocationString(); //getLocationString为ios或Android端的方法
}
②第二种调用方法
function callApp(name,param){
if(window.webkit){
window.webkit.messageHandlers[name].postMessage(param);
}else{
window.AndroidWebView[name](param);
}
}
二、APP端
1.Android Webview如下错误
Android Webview: “Uncaught TypeError: Cannot read property ‘getItem’ of null”
解决方式:
WebSettings settings = webView.getSettings();
settings.setDomStorageEnabled(true);
2.Android Webview启用javascript
解决方式:
WebWiew webView = (WebWiew )findViewById(R.id.webView);
WebSettings webSettings=webView.getSettings();
webSettings.setJavaScriptEnabled(true);
3.Android Webview运行脚本前,要有document对象,至少得load一个空白页
解决方式:
webView.loadData("","text/html","UTF-8");
4.Android Webview异步执行问题
下面代码无法正常运行
webView.loadData("", text/html", "UTF-8");
webView.loadUrl("javascript:alert('hello')");
几种解决方式:
- 从界面按钮调用
- 延时调用
- 在onPageFinished中调用
mWebView.setWebViewClient(new MyWebViewClient());
private class MyWebViewClient extends WebViewClient {
@Override
public void onPageFinished(WebView webView, String url) {
webView.loadUrl("javascript:"+script);
}
}
5.Android Webview额外实现console/alert
解决方式:
mWebView.setWebChromeClient(new MyWebChromeClient()); //optional, for show console and alert
private class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onConsoleMessage(ConsoleMessage cm) {
Log.d("test", cm.message() + " -- From line " + cm.lineNumber() + " of " + cm.sourceId());
return true;
}
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Toast.makeText(mContext, message, Toast.LENGTH_SHORT).show();
return true;
}
}
参考内容:https://zhidao.baidu.com/question/1894975701280081700.html