当前位置:   article > 正文

webview相关-Android原生和js交互_android webview界面关闭后 addjavascriptinterface 如何防止js

android webview界面关闭后 addjavascriptinterface 如何防止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");
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • ② 给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() {
                // 这里可以写需要做的操作
                // ......
            }
        });
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 以上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里的本方法需要的传参 , 不需要传参的时候不传就可以 .

    其他

    本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/824956
    推荐阅读
    相关标签
      

    闽ICP备14008679号