在 Android 中为 WebView 内的按钮设置 onClick 侦听器
Set an onClick listerner for a button inside a WebView in Android
在我的项目中,我在片段中有一个 WebView,它从 Internet 加载页面。我想在该页面的按钮上设置一个侦听器,以便当用户单击它时我能够移动到不同的片段。我没有正在加载的网页的代码。
我能够为 WebView 本身实现一个 onClick 侦听器 by using this answer,但我想不出一种方法来专门拦截 WebView 内部的按钮按下。
关于如何实现这样的东西有什么建议吗?谢谢
您可以使用 WebViewClient.shouldOverrideUrlLoading 来检测 WebViewClient 上的每个 URL 更改,并据此打开特定的片段,而不是在 webview 中设置按钮的点击监听器
您应该为 WebView 设置 WebViewClient 。这是一个简单的片段:
WebView webView;
webView.setWebViewClient(webClient);
WebViewClient webClient = new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
return true;
}
@Override
public void onLoadResource(WebView view, String url){
if( url.equals("http://cnn.com") ){
// Do the job here
}
}
}
向您的按钮添加一个函数,在您的网页中调用 alert("abc")
。
然后在您的 android 代码中添加以下内容。该代码将拦截您的警报,您可以实现自己的代码。
webView.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, final String message, JsResult result) {
if (message.equals("abc"))
{
result.cancel();
return true;
}else
return false;
}
});
以上所有答案都是很好的解决方法,但是,我最终使用 this solution and followed the guide on Android Developers page 启用 JavaScript 绑定。请注意,为了使拦截工作,需要在 JavaScript 文件中使用 Android
接口。
在我的项目中,我在片段中有一个 WebView,它从 Internet 加载页面。我想在该页面的按钮上设置一个侦听器,以便当用户单击它时我能够移动到不同的片段。我没有正在加载的网页的代码。
我能够为 WebView 本身实现一个 onClick 侦听器 by using this answer,但我想不出一种方法来专门拦截 WebView 内部的按钮按下。
关于如何实现这样的东西有什么建议吗?谢谢
您可以使用 WebViewClient.shouldOverrideUrlLoading 来检测 WebViewClient 上的每个 URL 更改,并据此打开特定的片段,而不是在 webview 中设置按钮的点击监听器
您应该为 WebView 设置 WebViewClient 。这是一个简单的片段:
WebView webView;
webView.setWebViewClient(webClient);
WebViewClient webClient = new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url){
return true;
}
@Override
public void onLoadResource(WebView view, String url){
if( url.equals("http://cnn.com") ){
// Do the job here
}
}
}
向您的按钮添加一个函数,在您的网页中调用 alert("abc")
。
然后在您的 android 代码中添加以下内容。该代码将拦截您的警报,您可以实现自己的代码。
webView.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, final String message, JsResult result) {
if (message.equals("abc"))
{
result.cancel();
return true;
}else
return false;
}
});
以上所有答案都是很好的解决方法,但是,我最终使用 this solution and followed the guide on Android Developers page 启用 JavaScript 绑定。请注意,为了使拦截工作,需要在 JavaScript 文件中使用 Android
接口。