Android webview捕获链接点击次数

时间:2013-01-03 10:42:12

标签: android

我正在开发的应用程序有一个webview,我需要捕获webview请求点击事件(例如:点击一个链接,点击一个按钮,点击youtube视频播放按钮,如...)

4 个答案:

答案 0 :(得分:19)

可以这样做

您必须为您的WebView设置WebViewClient。这是怎么做的。

WebView webView;//make sure to initialize  
webView.setWebViewClient(webViewClient);

WebViewClient webViewClient= new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView  view, String  url){
        return true;
    }
    @Override
    public void onLoadResource(WebView  view, String  url){
        if( url.equals("http://yoururl.com") ){
            // do something
        }
    }
}

答案 1 :(得分:5)

使用此代码,它对我有用

webview.setWebViewClient(new WebViewClient()
        {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url)
            {
                return true;
            }
        });

答案 2 :(得分:2)

您可以这样做:

WebView myWebView  = (WebView) findViewById(R.id.yourWebView);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.loadUrl("yourLink");

但是不要忘记创建一个WebViewClient:

public class MyWebViewClient extends WebViewClient {

     @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {

            return true;
        }
}

答案 3 :(得分:0)

当您处理应用程序中的链接时,WebViewClient回调(例如shouldOverrideUrlLoading和doUpdateVisitedHistory)可能无法提供一致或正确的值。在这种情况下,@ android.webkit.JavascriptInterface是您的朋友。想法是编写javascript点击处理程序(在内容中),该处理程序通过JavascriptInterface方法将信息传递给您的应用。

这是一个JavaScript示例,用于在内部跳转到#锚点的源代码处捕获scrollY。一旦进入doUpdateVisitedHistory,通常现在就无法提供此信息。

if (typeof AndroidCode != "undefined") { 
  var coll = document.getElementsByTagName("a"); 
  for (let i = 0; i < coll.length; i++) { 
    var href = coll[i].getAttribute("href"); 
    if (href.indexOf("#") >= 0) { 
      coll[i].addEventListener("click", function() { 
        AndroidCode.reportInternalJump(); 
      }); 
    } 
  } 
}

AndroidCode是通过WebView.addJavascriptInterface声明的对象的名称。

这是此技术的另一个有用示例,尽管它与链接没有直接关系。它将向OnPageFinished报告页面已完全加载(例如,在进行复杂的格式化时很有用,并且您不希望setScrollY直到行完成移动为止)。

if (typeof AndroidCode != "undefined") {
    AndroidCode.setLoadedStatus(false);

    window.onload = function () {
       AndroidCode.setLoadedStatus(true);
    }
}