【问题标题】:Webview - How to trigger Java Function from Javascript ButtonWebview - 如何从 Javascript 按钮触发 Java 函数
【发布时间】:2019-10-31 07:41:52
【问题描述】:

所以我遇到了一个问题,有一个按钮会调用 webview 函数

该按钮是 index.html 中 ID 为 play 的按钮,它将调用 src 中的 javascript playVideo 函数。 js,其中playVideo函数将通知webview按钮已被按下以检查Java函数中的条件。

我如何做到这一点?

下面的代码有助于获取上下文

index.html

<!DOCTYPE html>
<html>
<head>
    <title> Video</title>
    <script type="text/javascript" src="src.js"></script>
</head>
<body bgcolor="#333">
<center>
<video preload="auto" width="480" height="270" 
#Embed-video
</video>
<br>
<br>
<div>
<a class="first" href="#" id="play">Play</a>
<a class="second" href="#" id="pause">Pause</a>
</div> 
</center>

Javascript 代码

window.onload = function(){
  var video = document.getElementById('my-video');
  var play = document.getElementById('play');
  var pause = document.getElementById('pause');

  // associate functions with the 'onclick' events
  play.onclick = playVideo;
  pause.onclick = pauseVideo;

  function playVideo(e) {
    //call java function
  }

  function pauseVideo(e) {

  }
}

Java 函数

 webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(x,y) {
                if (js.playVideo()) {
                    //do something
                    return true;
                }else{
                    return false;
                }
            }
        });

【问题讨论】:

    标签: javascript android webview


    【解决方案1】:

    你应该像下面的例子那样为 Javascript 使用注解

        // Java File example
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, "show toast from web: " + toast, Toast.LENGTH_SHORT).show();
        }
    
    
        // Js file example
        function showAndroidToast(msg) {
            Android.showToast(msg);
        }
    

    因此,您应该尝试如下代码。

        function playVideo(e) {
            //call java function
            Android.doSomething();
        }
    
        webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(x,y) {
                    // implment your code with doSomething func here
                    if (doSomething()) {
                        //do something
                        return true;
                    }else{
                        return false;
                    }
                }
            });
    
        @JavascriptInterface
        public boolean doSomething() {
            // do something
            if(isPlaying) return true;
            return false;
        }
    

    【讨论】:

    • isPlaying 表示按下按钮时?如果是,我如何在代码中实现它?我还是有点困惑
    • IsPlaying 是布尔值的一种示例,您可以控制一些实现。您应该将 @JavascriptInterface 注释用于您想要使用的事件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多