我使用此代码检查用户是否触摸了webview
webview.setOnTouchListener(new View.OnTouchListener()
{
public boolean onTouch(View v, MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_UP)
{
//action
}
return false;
}
});
但是我只有在用户点击(触摸)链接时才需要执行操作,而不是用户触摸某些图片或在webview中进行scrool。 我需要在加载新网页时,或者当用户点击链接时重新启动某些变量,但是当他在屏幕上随机点击或者他的时候,他需要重新启动。 我不能用
public void onPageStarted(WebView view, String url, Bitmap favicon)
或
public boolean shouldOverrideUrlLoading(WebView view, String url)
因为在页面加载时会多次调用它,我只需要第一次执行操作,当用户单击链接(或按钮或使webview加载新页面的某些内容)时
有人知道怎么做吗?
提前谢谢
答案 0 :(得分:0)
第一步 - 启用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。通过这种方式,您可以完全控制哪个用户正在点击以及如何处理
老实说我不明白为什么你不能用shouldOverrideUrlLoading(WebView view, String url)
通过检查url
字符串到达的内容并设置'消耗'标志或像这样的
另外:整个代码都是从HERE
中窃取的