一、android端 webview 调用 html 中的 js函数
第一步: 设置 webview.getSettings
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = new WebView(this);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDefaultTextEncodingName("UTF-8");
webView.getSettings().setAllowContentAccess(true); // 是否可访问Content Provider的资源,默认值 true
webView.getSettings().setAllowFileAccess(true); // 是否可访问本地文件,默认值 true
// 是否允许通过file url加载的Javascript读取本地文件,默认值 false
webView.getSettings().setAllowFileAccessFromFileURLs(false);
// 是否允许通过file url加载的Javascript读取全部资源(包括文件,http,https),默认值 false
webView.getSettings().setAllowUniversalAccessFromFileURLs(false);
//开启JavaScript支持
webView.getSettings().setJavaScriptEnabled(true);
// 支持缩放
webView.getSettings().setSupportZoom(true);
// 在android内打卡页面,防止调用浏览器打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
webView.setWebChromeClient( new WebChromeClient(){
@Override
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
return super.onJsAlert(view, url, message, result);
}
});
// 设置Js交互的权限
webView.addJavascriptInterface(new CallObject(this), "callmy");
webView.loadUrl(url);
setContentView(webView);
}
第二步:在调用函数里 可以使用 webView.loadUrl() 直接调用
在html中的代码
<script type="text/javascript">
function callJs( value ) {
alert( value );
}
</script>
在android中调用
public void testClick() {
webView.loadUrl("javascript:callJs('"+ scanValue +"')");
}
二、webiew中的html javascript调用安卓android中的方法
第一步:webivew.getSettings 设置如图,添加如下设置
// 设置Js交互的权限,将 java对象 CallObject 和 javascript对象 callmy 做关联
// callmy 在 javascript 中调用有需要
webView.addJavascriptInterface(new CallObject(MainActivity.this), "callmy");
第二步:在安卓android 端 新建 CallObject 类
public class CallObject extends Object {
private Context context;
public HmsScanCall(Context context) {
this.context = context;
}
@JavascriptInterface
public void callScan(String msg) {
Toast.makeText(context, "javascript 调用的我 .." + msg, Toast.LENGTH_LONG).show();
}
}
第三步:在html中,javascript代码。callmy 的作用,用来调用方法。
window.callmy.callScan();