我正在开发的应用程序有一个 webview,我需要捕获 webview 请求点击事件(例如:点击一个链接,点击一个按钮,点击一个 youtube 视频播放按钮,例如......)
问问题
30781 次
4 回答
26
这可以做到
你必须为WebViewClient
你的 WebView 设置一个。这是如何做到的。
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
}
}
}
于 2013-01-03T10:56:15.367 回答
6
使用此代码对我有用
webview.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
return true;
}
});
于 2013-01-03T10:55:29.987 回答
3
你可以这样做:
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;
}
}
于 2013-01-03T11:00:38.103 回答
2
当您在应用程序中处理链接时,诸如 shouldOverrideUrlLoading 和 doUpdateVisitedHistory 之类的 WebViewClient 回调可能不会提供一致或正确的值。在这种情况下,@android.webkit.JavascriptInterface 是您的朋友。这个想法是编写 javascript 点击处理程序(在内容中),通过 JavascriptInterface 方法将信息传递给您的应用程序。
这是一个 javascript 示例,用于在内部跳转到 #-anchor 的源处捕获 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 报告页面已完全加载(例如,在进行复杂格式化并且您不想在行完成移动之前设置滚动Y 时很有用)。
if (typeof AndroidCode != "undefined") {
AndroidCode.setLoadedStatus(false);
window.onload = function () {
AndroidCode.setLoadedStatus(true);
}
}
于 2020-11-23T19:13:38.637 回答