javascript - Android 在 WebView 中调用 JavaScript 函数

标签 javascript android webview android-webview

我正在尝试调用一些位于 html 页面中的 javascript 函数,该页面在 android webview 中运行。下面的代码尝试执行的操作非常简单 - 从 android 应用程序调用带有测试消息的 javascript 函数,该函数又在通过 toast 显示测试消息的 android 应用程序中调用 java 函数。

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();
    }
}

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

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

最佳答案

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

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

关于javascript - Android 在 WebView 中调用 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4325639/

相关文章:

android - Android 中 System.out.print 的替代方案

android - 计数记录并实时返回记录总数,然后将其显示为小部件中的文本

android facebook webview登录不带用户登录

javascript - 如果某个数组索引处存在值,我如何检查 JavaScript?

javascript - 如何在 Firebase Cloud 函数中调用导出的 https Firebase Cloud 函数?

javascript - 在 vue.js 中获取 FormData 中的 null 值

javascript - 使用 jQuery 生成的表填充输入字段

android - 将项目迁移到 gradle 文件??本项目不使用 Gradle 构建系统。我们建议您迁移到使用 Gradle 构建系统

android - 使用 WebView 打开位于我的应用程序内的 html 文件

javascript - 导航到时,Android/WebView 不会加载 javascript 库图像