我正在开发的应用程序有一个webview,我需要捕获webview请求点击事件(例如:点击一个链接,点击一个按钮,点击youtube视频播放按钮,如...)
答案 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);
}
}