Android 在 WebView 中调用 JavaScript 函数

我正在尝试调用一些javascript函数,这些函数位于Android Webview中运行的html页面中。代码在下面尝试执行的操作非常简单 - 从Android应用程序中,使用测试消息调用javascript函数,这将调用Android应用程序中的java函数,该应用程序通过Toast显示测试消息。

javascript 函数看起来像这样:

function testEcho(message){
     window.JSInterface.doEchoTest(message);
}

从WebView开始,我尝试通过以下方式调用javascript,但没有运气:

myWebView.loadUrl("javascript:testEcho(Hello World!)");
mWebView.loadUrl("javascript:(function () { " + "testEcho(Hello World!);" + "})()");

我确实在WebView上启用了javascript

myWebView.getSettings().setJavaScriptEnabled(true);
// register class containing methods to be exposed to JavaScript
myWebView.addJavascriptInterface(myJSInterface, "JSInterface"); 

这里是 Java 类

public class JSInterface{

private WebView mAppView;
public JSInterface  (WebView appView) {
        this.mAppView = appView;
    }

    public void doEchoTest(String echo){
        Toast toast = Toast.makeText(mAppView.getContext(), echo, Toast.LENGTH_SHORT);
        toast.show();
    }
}

我花了很多时间在谷歌上搜索,看看我可能做错了什么。我发现的所有示例都使用此方法。有没有人看到这里有什么不对劲?

编辑:还有其他几个外部javascript文件在html中被引用和使用,它们可能是问题所在吗?


答案 1

我弄清楚了问题所在:testEcho()参数中缺少引号。这就是我接到工作电话的方式:

myWebView.loadUrl("javascript:testEcho('Hello World!')");

答案 2

从kitkat开始,使用 evaluateJavascript 方法代替 loadUrl 来调用 javascript 函数,如下所示

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
        webView.evaluateJavascript("enable();", null);
    } else {
        webView.loadUrl("javascript:enable();");
    }