android webview 怎样监听HTML中的按钮并得到按钮的url

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android webview 怎样监听HTML中的按钮并得到按钮的url相关的知识,希望对你有一定的参考价值。

求相关demo,有具体的步骤也行啊,在线等。

webview中是无法做到的,除非这个html页面是由你写的。

具体分析如下:

    webview中是无法做到的,除非这个HTML页面是由你写的,用户输入结束,HTML上调用你提前插入的JS告知到你的app,你再去做记录。

    目前android市场上的一些应用采用的开发方式大致分为三种:Native App、Web App、Hybrid App。

    Android API中提供了WebView组件来实现对html的渲染。所谓的HybridApp开发方式即是汇集了HTML5、CSS3、jS的相关开发技术,以及数据交换格式json/XML。这显然是Web开发工程师的技能。

    有了WebView这个组件,Android应用开发技术也就转嫁到html与java数据交互上来,说白了就是js与WebView的数据交互。

    现在这样是不能交互的,必须添加javaScripetInterface,这样可以交互但是不安全。

参考技术A http://blog.csdn.net/cappuccinolau/article/details/8262821
你可以参考这个博客,这个你不能单纯认为是让webview去监听html页面中button了,应该是一种混合的机制,就是用html调用java层代码,具体实现就是这个博客,希望能帮到你追问

不是交互的问题,是有好多页面,用户点击的时候,我先要获取到他点击的url确定他到了那个页面然后再进行交互工作

追答

这样啊,那你既然可以调用,那就给后台传回local.href就是当前页面的url,而如果是对应按钮的话,那你就给按钮加上id属性,同样都可以返回给后台啊,就是点击按钮的时候传参数回给后台,不知是不是你说的意思

追问

不太明白你说的,我现在就是android的UI是由H5给的,然后用webview加载进去,现在要得到每个H5界面的url,确定用户点击到哪个h5界面了,然后进行交互,求指点。。。

本回答被提问者和网友采纳

通过Android WebView中的javascript检测点击HTML按钮

我对javascript不是很熟悉,但我认为这是实现目标的最佳方式。如果没有,请纠正我。

我最后有一个许可文本2按钮。所有这些都是用WebView中的HTML编写的,因为许可证中有一些链接。现在,我希望当用户点击WebView中的“ok”按钮时,这会触发一些我可以用Java抓取的javascript或者监听器,以便在应用程序中启动Intent。 (取消按钮会相反,但如果我知道如何做,我可以做另一个。;))

这会给某人敲响吗?欢迎任何解释或示例代码。

答案

经过一番阅读后,我终于得到了它。当你对javascript一无所知以及文档在这个主题上相当薄时,有点难。 这是我的解决方案,希望这会有助于其他人:

使用包含2个按钮的HTML页面,如下所示:

<div>
     <button type="button" id="ok" style="font-weight: 700; margin-right: 20px;" onclick="validClick();">J'accepte</button>
     <button type="button" id="no" onclick="refuseClick();">Je refuse</button>
</div>

我将点击事件发送到HTML页面顶部的javascript:

<script language="javascript">

   function validClick()
   {
      valid.performClick();
      document.getElementById("ok").value = "J'accepte";
   }
   function refuseClick()
   {
      refuse.performClick();
      document.getElementById("no").value = "Je refuse";
   }

</script>

validrefuse是我通过javascript接口使用他们的方法的2个java对象。所以在java中,我创建了2个按钮(实际上并没有真正显示在Activity中,只是在这里用于他们的方法,并且是HTML按钮的阴影:

valid = new Button(ctx);
valid.setOnClickListener(this);
refuse = new Button(ctx);
refuse.setOnClickListener(this);

然后我添加了javascript到我的WebView

// Enablejavascript
WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
// Add the interface to record javascript events
wv.addJavascriptInterface(valid, "valid");
wv.addJavascriptInterface(refuse, "refuse");

最后,处理onClick方法中的click事件:

@Override
public void onClick(View v) {
    if (v.equals(valid)) {
        //do Something
    } else if (v.equals(refuse)) {
        //do Something else }
}

希望这会对一些人有所帮助

另一答案

这是一个更简单的解决方案。在Java端,为每个按钮创建一个监听器。它不需要是任何特定的类,因为将使用反射查找该方法:

WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
  public void performClick()
  {
    // Deal with a click on the OK button
  }
}, "ok");

然后在HTML中,直接从按钮标记中调用它:

<button type="button" onclick="ok.performClick();">OK</button>
另一答案

如果您还想检索按钮值。

Java的:

WebSettings ws = wv.getSettings();
ws.setJavaScriptEnabled(true);
wv.addJavascriptInterface(new Object()
{
   @JavascriptInterface           // For API 17+
   public void performClick(String strl)
   {
      stringVariable = strl;
      Toast.makeText (YourActivity.this, stringVariable, Toast.LENGTH_SHORT).show();
   }
}, "ok");

HTML:

<button type="button" value="someValue" onclick="ok.performClick(this.value);">OK</button>
另一答案
    WebView browser = new WebView(this);
    browser.getSettings().setJavaScriptEnabled(true);
    browser.loadUrl("file:///android_asset/page.html");
    setContentView(browser);
    WebSettings ws = browser.getSettings();
    ws.setJavaScriptEnabled(true);
    browser.addJavascriptInterface(new Object()
    {
        @JavascriptInterface           // For API 17+
        public void performClick(String strl)
        {

            Toast.makeText (MainActivity.this, strl, Toast.LENGTH_SHORT).show();

        }
    }, "ok");

page.html文件

<html>
<body>

    First name: <input type="text" name="fname" id="txtfname"><br>
    Last name: <input type="text" name="lname" id="txtlname"><br>

    <script>
    function getValues() {
    document.getElementById("btnOK").value = document.getElementById("txtfname").value+" "+document.getElementById("txtlname").value;
    }
    </script>

    <button type="button" value="" id="btnOK" onclick="getValues();ok.performClick(this.value);">OK</button>
</body>
</html>

以上是关于android webview 怎样监听HTML中的按钮并得到按钮的url的主要内容,如果未能解决你的问题,请参考以下文章

Android webview加载的页面怎样调试JS

如何在 Android 的 WebView 中“监听”某些内容?

Android:WebView 触摸事件监听器

用webview做的android客户端怎样调用摄像头拍照

Android webview中的js如何监听键盘事件

如何在 Android 中为 WebView 制作滚动监听器