繁体   English   中英

如何检测WebView中链接的点击

[英]How to detect clicks on links in webview

我使用此代码来检查用户是否在Web视图内触摸过

                webview.setOnTouchListener(new View.OnTouchListener() 
                {  
                    public boolean onTouch(View v, MotionEvent event) 
                    {
                        if(event.getAction() == MotionEvent.ACTION_UP)
                        {
                                //action

                        }  
                      return false;
                    }
                });

但只有在用户点击(触摸)链接时,我才需要执行操作,而不是在用户触摸某些图片或在网络视图中执行scrool时。 当加载新网页或用户单击链接时,我需要重新初始化一些变量,但是当用户在屏幕上随机单击或执行scrool时,则不需要重新初始化。 我不能使用

public void onPageStarted(WebView view, String url, Bitmap favicon)

要么

public boolean shouldOverrideUrlLoading(WebView view, String url)

导致在页面加载时多次被调用,而我只需要在用户单击链接(或按钮或其他使Webview加载新页面的内容)时第一次仅执行一次操作

有人知道该怎么做吗?

先感谢您

第一步-启用JavaScript:

WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

第二步-在Java和Javascript之间创建接口:

public class WebAppInterface {
    Context mContext;

    /** Instantiate the interface and set the context */
    WebAppInterface(Context c) {
        mContext = c;
    }

    /** Show a toast from the web page */
    @JavascriptInterface
    public void showToast(String toast) {
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
    }
}

注册您的界面:

webView.addJavascriptInterface(new WebAppInterface(this), "Android");

并将此JS放在您的html页面中:

<script type="text/javascript">
    function showAndroidToast(toast) {
        Android.showToast(toast);
    }
</script>

html的示例:

<input type="button" value="Say hello" onClick="showAndroidToast('Hello Android!')" />

如果显示的页面不是您要显示的页面,则可以将其下载为纯文本格式,然后插入JS并使用myWebView.loadDataWithBaseURL加载html。 这样,您可以完全控制哪个用户正在单击以及如何使用它

老实说,我不明白为什么您不能通过应检查url字符串中到达的内容并设置'consumed'标志或类似的内容来使用shouldOverrideUrlLoading(WebView view, String url)来做到这一点

也:整个代码从这里被盗

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM