webView.evaluateJavascript 返回null

在Android开发过程中,使用WebView进行Java与JavaScript交互时可能会遇到返回值为null的困扰。本文详细记录了解决这一问题的过程,帮助开发者节省宝贵的开发时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android 中,java 与Javascript  交互的时候经常会出一些小问题,耽误时间;

今天让我浪费了1个小时,搞了一个问题:

function getDeviceID() {
	var index = 900;
	return index + 1;
}


 webview.evaluateJavascript("javascript:getDeviceID()", new ValueCallback<String>() {
                    @Override
                    public void onReceiveValue(String s) {
                        Log.d("zzp", "--s--=" + s);
                    }
                });
如果直接用上面的代码进行编辑,返回的s==null;
会报异常  Uncaught ReferenceError: <pre name="code" class="html">getDeviceID
is not defined

为什么会报这个异常呢,主要是html页面还没有加载完,就加载这个方法,这样是找不到这个方法的;
如果放到<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'宋体';font-size:10.5pt;"><span style="background-color:#344134;">onPageFinished()  里面,就顺利通过了,</span>
而且s 返回值也不是null了

希望大家留意这一点



package com.github.lzyzsd.jsbridge; import android.graphics.Bitmap; import android.webkit.WebView; import android.webkit.WebViewClient; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; /** * Created by bruce on 10/28/15. */ public class BridgeWebViewClient extends WebViewClient { private BridgeWebView webView; public BridgeWebViewClient(BridgeWebView webView) { this.webView = webView; } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { try { url = URLDecoder.decode(url, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } if (url.startsWith(BridgeUtil.YY_RETURN_DATA)) { // 如果是返回数据 webView.handlerReturnData(url); return true; } else if (url.startsWith(BridgeUtil.YY_OVERRIDE_SCHEMA)) { // webView.flushMessageQueue(); return true; } else { return super.shouldOverrideUrlLoading(view, url); } } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); if (BridgeWebView.toLoadJs != null) { BridgeUtil.webViewLoadLocalJs(view, BridgeWebView.toLoadJs); } } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // if (webView.getStartupMessage() != null) { for (Message m : webView.getStartupMessage()) { webView.dispatchMessage(m); } webView.setStartupMessage(null); } } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); } }
07-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值