Hybrid App开发问题记录

一、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

你可能感兴趣的:(webview,移动端,ios,Android,webapp,html5,Hybrid,App)