Android检测webview URL更改
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android检测webview URL更改相关的知识,希望对你有一定的参考价值。
我的android应用程序中有一个webview,想要检测网址何时发生变化。
当用户在info.php页面上时,我想使用它来隐藏顶部栏中的信息按钮,当他不在info.php页面上时再次显示它。
我用Google搜索但找不到任何正常工作的代码,有人可以帮帮我吗?
您可以使用WebViewClient.shouldOverrideUrlLoading检测WebViewClient上的每个URL更改
这将有助于检测由javascript引起的重定向。
WebViewClient mWebViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.android.onUrlChange(window.location.href);"); }
};
myWebView.setWebViewClient(mWebViewClient);
}
@JavascriptInterface
public void onUrlChange(String url) {
Toast.makeText(mContext, "Url redirected",Toast.LENGTH_SHORT).show();
}
对于那些通过javascript加载网址。有一种方法可以通过JavascriptInterface检测网址更改。这里我以youtube为例。使用JavaScriptInteface有异步问题,幸运的是它只是一个回调在这里,所以这将是更少的问题。请注意,必须存在@javascriptinterface注释。
{
youtubeView.getSettings().setJavaScriptEnabled(true);
youtubeView.setWebViewClient(mWebViewClient);
youtubeView.addJavascriptInterface(new MyJavaScriptInterface(),
"android");
youtubeView.loadUrl("http://www.youtube.com");
}
WebViewClient mWebViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.android.onUrlChange(window.location.href);");
};
};
class MyJavaScriptInterface {
@JavascriptInterface
public void onUrlChange(String url) {
Log.d("hydrated", "onUrlChange" + url);
}
}
如果您重写此WebViewClient方法,您将能够处理网址更改,并且javascript网址会更改:
public class YXWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("Listener", "Start");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("Listener", "Finish");
}
}
然后在WebView中设置WebViewClient
yxWebViewClient = new YXWebViewClient();
webview.setWebViewClient(yxWebViewClient);
我知道我已经迟到了,但我一遍又一遍地遇到这个问题......我终于找到了一个非常直接的蠢事。只需覆盖WebViewClient.doUpdateVisitedHistory
override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) {
// your code here
super.doUpdateVisitedHistory(view, url, isReload)
}
它适用于所有网址更改甚至javascript!
如果这不会让你开心那么我不知道会是什么:)
尝试使用onLoadResource
。即使您使用JS更改网址,也会至少调用一次。但它可能被称为不止一次,所以要小心。
方法onPageFinished似乎至少在现代WebViews中起作用。
我有一个有趣的问题让我想到了这个问题并很乐意提供一个可以帮助其他人的解决方案,如果他们这样做是因为googlebingyahoo搜索。
从我登录用户或注销用户的首选项屏幕返回后,mwebVew.reload()不会获取我想要加载的新URL。它会更好地更新共享首选项,但不会更新和替换url网页。因此,在几个小时没有看到答案之后,我尝试了以下内容,并且它起到了真正的作用。
mWebView.resumeTimers();
如果您想了解更多信息,请参阅link to the doco。
希望它可以拯救别人我经历过的痛苦,并且很高兴有人告诉我,我应该以另一种方式实施它。
我有同样的问题。所以我通过重写public void onPageStarted(WebView view, String url, Bitmap favicon)
方法解决了这个问题,如下所示:
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
// Here you can check your new URL.
Log.e("URL", url);
super.onPageStarted(view, url, favicon);
}
});
您还可以覆盖public void onPageFinished(WebView view, String url)
方法,以便在页面加载过程结束时获取新的URL。
我用这个方法:
webView.setWebChromeClient(new WebChromeClient()
{
@Override public void onProgressChanged(WebView view, int newProgress) {
if (view.getUrl().equals(mUrl))
{
}
else
{
mUrl = view.getUrl();
// onUrlChanged(mUrl) // url changed
}
super.onProgressChanged(view, newProgress);
}
};
);
mUrl是String
的字段......
以上是关于Android检测webview URL更改的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin 表单 - Webview 检测 URL 更改