关于android:android的js互调如何在webView加载前给web传值

32次阅读

共计 1704 个字符,预计需要花费 5 分钟才能阅读完成。

前言: 明天做我的项目遇到个问题。需要是:webview 在加载网页的时候,在网页渲染前给 web 传值,用于网页渲染?看完,你是不是很有趣味?接下来我把 js 交互也具体总结一篇。心愿对同学们有帮忙。

一、android 调用 web 上的办法

间接上代码吧:

// 无参调用,办法名为:setDeviceData;这里的参数为 json
binding.webViewX5.loadUrl("javascript:setDeviceData()");

// 有参数调用,办法名为:setDeviceData;参数为:json
binding.webViewX5.loadUrl("javascript:setDeviceData('" + json + "')");

二、web 调用 android 上的办法

2.1、步骤 1:

首先在咱们 webView 的 Activity 里定义个外部类,如下:

  • test()就是 webView 要调用咱们的办法
  • 留神 test 办法里有没有参数,有几个参数要和 web 调用的时候定义好
@SuppressLint("JavascriptInterface")
private class AndroidJavaScript {
    Context mContxt;
    public AndroidJavaScript(Context mContxt) {this.mContxt = mContxt;}
    
    @JavascriptInterface
    public void test(int value) {}}

2.2、步骤 2:

而后 addJavascriptInterface,在 loadUrl 前后都行。

        binding.webViewX5.addJavascriptInterface(new AndroidJavaScript(WebMciActivity.this), "android");
        binding.webViewX5.loadUrl(url);

这样就实现了,这个时候你可能要问 ”android” 是怎么来的,那么看一段 web 前端的代码:

能够看到有句代码是 window.android. 办法名。没错,这里 web 如果写的不是 android,那么在咱们 addJavascriptInterface 时候要和 web 前端保持一致

三、重点:如何在 webView 加载前给 web 传值呢。

问题是这样的:咱们要在 webView 渲染之前给 web 传值,用于 webView 渲染页面。比方咱们给 web 上的 testInfo 传值。如果 testInfo=1, 咱们就把开关关上,否则敞开开关。

在我大量试验下,终于找到办法了。代码用的啥不用说了必定是

  • binding.webViewX5.loadUrl(“javascript:testInfo=1”);
  • 留神下面代码是给 testInfo 传值 1 个常量 1。如果是传字符串或者 json bean 对象得用上面代码:
// 切记、通过了大量体力劳动,得出的论断!!binding.webViewX5.loadUrl("javascript:var deviceInfo='" + json + "'");

那问题是,这句代码应该在哪里执行呢。咱们都晓得 webView 有 2 个监听,其中一个是:

  • setWebChromeClient(webChromeClient);

加载就在这个 webChromeClient 里。

private boolean isInit = true;
private WebChromeClient webChromeClient = new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {if (isInit){
            isInit = false;
            binding.webViewX5.loadUrl("javascript:testInfo=1");
        }
    }

    @Override
    public void onReceivedTitle(WebView webView, String s) {super.onReceivedTitle(webView, s);

    }
};

最初需要解决。如果对你有帮忙,能够帮忙赞一个。

正文完
 0