• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

android 搞代码 3年前 (2022-03-30) 26次浏览 已收录 0个评论
文章目录[隐藏]

前言: 明天做我的项目遇到个问题。需要是: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);

    }
};

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


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:android的js互调如何在webView加载前给web传值

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址