当前位置: 首页 > 面试题库 >

通过Android WebView从JavaScript调用Java函数

田念
2023-03-14
问题内容

我想在我的Android应用程序中对某些Java代码进行同步调用。

我的Java代码:

final class MyWebChromeClient extends WebChromeClient {
        public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
            Log.d("LogTag", message);
            result.confirm();
            return true;
        }
    }

我的JavaScript代码:

<html>
<script>
function java_request(){
    alert('test');
}
</script>
<body>
<h2>Welcome</h2>
<div id="area"></div>
<form>
<input type="button" value="java_call" onclick="java_request()">
</form>
</body>
</html>

当我点击java_call按钮时,按钮进入按下状态。我可以'test'控制台日志中看到。一切正常,直到这里。

问题是,按钮永远不会回到其正常状态。它保持在按下状态。也许JavaScript执行中断了还是什么?

为什么按钮从不返回其正常状态?


问题答案:

我认为这不是让JavaScript执行Java代码的最佳解决方案。看这里:

如果要将本机代码公开给HTML,以便可以通过javascript进行调用,请在网络视图声明周围执行以下操作:

JavaScriptInterface jsInterface = new JavaScriptInterface(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(jsInterface, "JSInterface");

宣布课程JavaScriptInterface

public class JavaScriptInterface {
    private Activity activity;

    public JavaScriptInterface(Activity activity) {
        this.activity = activity;
    }

    @JavascriptInterface
    public void startVideo(String videoAddress){
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(videoAddress), "video/3gpp"); 
        activity.startActivity(intent);
    }
}

我声明了一个用于播放视频的功能,但是您可以做任何您想做的事情。

最后,您可以WebView通过简单的javascript调用在内容中调用此代码:

<video width="320" height="240" controls="controls" poster='poster.gif'
       onclick="window.JSInterface.startVideo('file:///sdcard/test.3gp');" >
   Your browser does not support the video tag.
</video>

这个例子取自我的另一个关于播放视频的答案,但应该有足够的解释。

编辑
如果应用程序的目标版本设置为17或更高,则需要在@JavascriptInterface要导出到Web视图的每种方法上方添加注释。



 类似资料:
  • 问题内容: 我使用PhoneGap开发了一个应用程序。我得到了一项在后台进行本地编码的服务(该服务和手机缺口应用程序在同一项目中)。不幸的是,我想从此服务中调用javascript函数。因此,我在网上搜索并创建了一些有趣的东西:创建一个扩展Plugin的类并在其中进行一些处理。然后我发现了这个: 我用此代码进行了测试,但是发生了一些错误: 这是我测试的方式: 在类c中,execute方法如下: 当

  • 问题内容: 我正在尝试从外部PHP文件将JavaScript函数调用为JavaScript脚本。我的代码又大又不同,所以我在这里编写示例代码。 这是我的PHP代码: 这是我的JavaScript代码: 这就是我想要做的。 我 原来的 PHP文件不包含这些数学函数,但是想法是相同的。 如果一些它怎么没有一个妥善的解决办法,那么可能你 请 提出一种替代,但它应该从外部PHP调用值。 问题答案: 是的,

  • 问题内容: 是否可以从Javascript调用Java(GWT)方法?从文档中也不清楚。http://code.google.com/intl/zh- CN/webtoolkit/doc/latest/DevGuideCodingBasicsJSNI.html上的 所有示例都演示了如何从JSNI(而非JS)函数调用Java函数。 更新1 这是一个Java代码: 这是html中的呼叫者按钮示例: 这

  • 问题内容: 谁能告诉我如何将值作为函数的返回值返回。 当您点击注册表格中的提交时,上述功能就会触发(很明显)。问题是,无论响应是什么,此表单都将提交,并且警告框有时不显示任何内容(空白),有时根本不显示。但是,如果我将结尾更改为手动[即用] 替换,则正确的值将显示在警报框中。 PS我比JavaScript的菜鸟还差,因此也欢迎提出一般性改进代码的建议。 问题答案: 问题是,直到……等待……状态改变

  • 问题内容: 我正在用ASP.NET编写网页。我有一些JavaScript代码,并且有一个带有click事件的Submit按钮。 是否可以使用JavaScript的click事件调用我在ASP中创建的方法? 问题答案: 好吧,如果您不想使用Ajax或任何其他方式来执行此操作,而只希望进行正常的ASP.NET回发,则可以按照以下方法进行操作(不使用任何其他库): 虽然有点棘手… :) 一世。在您的代码

  • 问题内容: 有人可以提供从CodeBehind调用JavaScript函数的好示例,反之亦然吗? 问题答案: 您可以尝试这样: