webview相关-Android原生和js交互

js调用Android原生代码里的方法

  • ① webview的一些设置
mWebviewContent.requestFocus();
WebSettings setting = mWebviewContent.getSettings();
setting.setDefaultTextEncodingName("utf-8");//设置网页默认编码
setting.setLoadWithOverviewMode(true);
setting.setUseWideViewPort(true);
setting.setJavaScriptEnabled(true); // 设置Webview支持JS代码
setting.setJavaScriptCanOpenWindowsAutomatically(true);//JS互调
setting.setDatabaseEnabled(true);   // 开启 database storage API 功能
//        setting.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
setting.setDomStorageEnabled(true); // 开启 DOM storage API 功能
//        setting.setAppCacheEnabled(true);//开启 Application Caches 功能
setting.setAllowContentAccess(true); // 是否可访问Content Provider的资源,默认值 true
setting.setAllowFileAccess(true);// 设置允许访问文件数据
// 是否允许通过file url加载的Javascript读取本地文件,默认值 false
setting.setAllowFileAccessFromFileURLs(false);
// 是否允许通过file url加载的Javascript读取全部资源(包括文件,http,https),默认值 false
setting.setAllowUniversalAccessFromFileURLs(false);
// 支持缩放
setting.setSupportZoom(true);
setting.setTextZoom(100);
/**
 * js调用java代码里的方法
 */
mWebviewContent.addJavascriptInterface(new JavaScriptInterface(mContext, mWebviewContent), "app");
  • ② 给js提供可调用的方法
class JavaScriptInterface {

    private Context context;
    private WebView webView;

    private JavaScriptInterface(Context context, WebView webView) {
        this.context = context;
        this.webView = webView;
    }


    @JavascriptInterface
    public void showChoosePicDialog() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 这里可以写需要做的操作
                // ......
            }
        });
    }
}
  • 以上webview的一些设置可根据实际情况删减 , 但是开启允许互调的设置不可删 .
  • 重点1 : mWebviewContent.addJavascriptInterface(new JavaScriptInterface(mContext, mWebviewContent), "app");这个里的"app"要对应上前端代码的参数 , 是什么都可以 , 但是两边一定要相同 .
  • 重点2 : 还是这句mWebviewContent.addJavascriptInterface(new JavaScriptInterface(mContext, mWebviewContent), "app");中 , new的这个JavaScriptInterface为你自己写的js可调用的那些方法上的类名 .
  • 重点3 : 给js提供可调用的方法要加@JavascriptInterface
  • 重点4 : 给js提供可调用的方法里的内容 , 要回到主线程执行 , 即runOnUiThread

Android原生调用js里的方法

webView.loadUrl("javascript:webJS.reload(1)");
  • 重点 : webJS.reload()为js那边的方法 , 方法名要和js那边一样 , 括号里的1为js里的本方法需要的传参 , 不需要传参的时候不传就可以 .

其他

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值