【问题标题】:android studio webview get data and onfinishandroid studio webview 获取数据并完成
【发布时间】:2017-02-23 04:12:44
【问题描述】:

我有一个包含 webview 的 android 活动,并且我有一个包含局部变量 marks 的页面。当用户得到正确答案时,局部变量将增加。在网页中,有一个名为exit的按钮,它应该关闭网页并返回android中的activity,它也应该携带局部变量marks返回activity。我想问一下如何在网页中完成退出按钮以关闭页面并使用Javascript返回局部变量以及android中的活动如何从网页中接收局部变量。

我在 android 中的活动:

private WebView webview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //setContentView(R.layout.activity_main);

    webview = new WebView(this);
    webview.getSettings().setJavaScriptEnabled(true);

    try {
        webview.setWebViewClient(new WebViewClient());
        webview.loadUrl("file:///android_asset/index.html");
    }
    catch(Exception ex)
    {
        ex.printStackTrace();
    }
    setContentView(webview);
}

我的退出按钮是一个 div:

<div class="exit" onclick="finish()">Exit</div>

我将使用finish()函数返回变量并关闭网页回到android中的活动。

function finish() {}

【问题讨论】:

    标签: javascript android html webview


    【解决方案1】:

    通知主机应用程序页面已完成加载。然后拨打onPageFinished()

    webview.setWebViewClient(new WebViewClient() {
    
       public void onPageFinished(WebView view, String url) {
            // do your stuff here
        }
    });
    

    SOURCE

    【讨论】:

    • 但是activity如何接收局部变量以及javascript如何返回并调用android activity中的onPageFinish()函数呢?
    【解决方案2】:

    你可以做一件事..单击退出调用任何 url,如http://../getmark?marks=2,一旦 url 在 webview 中加载完成/退出 webview。在活动中

     webView.setWebViewClient(new WebViewClient() {
    
       public void onPageFinished(WebView view, String url) {
            // parse the url here to get marks
        }
    });
    

    【讨论】:

    • 但是我怎么称呼这个网址呢?由于location.href = http://../getmark?marks=2 在 webview 中不起作用
    • 以及如何在android活动中使用Javascript返回和调用onPageFinish()函数?
    【解决方案3】:

    在 onCreate 中注册一个 javascriptinterface 到你的 webview:

    this.webview.addJavascriptInterface(new MyJSInterface(this), "Android"); 
    

    在你的 Activity 中实现 setCount 方法:

    public void setCount (int count) {
        //do what ever you want with count
    }
    

    创建一个新的 JavascriptInterface-Class:

    public class MyJSInterface {
        private YourActivity yourActivity = null;
        public MyJSInterface (YourActivity yourActivity) {
            this.yourActivity = yourActivity;
        }
    
        @JavascriptInterface
        public void invoke (int count)  {
              this.yourActivity.setCount(count);
        }
    }
    

    在 javascript 中:

    function finish(marks) {
        if (Android !== undefined) {
            if (Android.invoke !== undefined)  {
                Android.invoke(marks);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 2013-06-02
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多