[英]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.