我在我的android应用程序中有一个webview,并希望检测到de url更改时。Android检测webview URL更改
我想用这个来隐藏顶部栏中的info按钮,当用户在info.php页面上时,当他不在info.php页面上时再次显示它。
我使用Google搜索,但找不到任何工作代码,任何人都可以帮我吗?
Thx提前!
我在我的android应用程序中有一个webview,并希望检测到de url更改时。Android检测webview URL更改
我想用这个来隐藏顶部栏中的info按钮,当用户在info.php页面上时,当他不在info.php页面上时再次显示它。
我使用Google搜索,但找不到任何工作代码,任何人都可以帮我吗?
Thx提前!
您可以使用WebViewClient.shouldOverrideUrlLoading侦测到您的WebViewClient每个URL变化
它不能检测到URL改变的JavaScript不会导致网页重新加载。 – 2013-06-13 17:21:33
@HelinWang有没有其他检测方法 – 2013-10-10 12:49:37
@HelinWang,你有没有检测到JavaScript重定向的代码? – 2017-08-02 04:52:09
尝试使用onLoadResource
。即使您使用 JS来更改您的网址,它也会至少被调用一次。但它可能被称为不止一次,所以要小心。
我有一个有趣的问题,带给我这个问题,并乐意提供一个解决方案,可以帮助别人,如果他们来这样做,由于谷歌雅虎搜索。
mwebVew.reload()不会从我首先登录用户或注销用户的首选项屏幕返回时加载的新URL。它将更新共享首选项,但不更新并替换url网页。因此,在几个小时没有看到答案后,我尝试了以下方法,并且它的工作非常棒。
mWebView.resumeTimers();
在这里,如果你想了解更多的信息是link to the doco。
希望它救了别人我经历过的痛苦,并高兴地有人告诉我,我应该以另一种方式实施它。
对于那些通过javascript加载网址。有一种方法可以通过JavascriptInterface检测URL更改。这里我使用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);
}
}
为什么在使用MyJavaScriptInterface时可以直接在onPageFinished中工作? – 2017-07-07 10:08:15
javascript:window.android.onUrlChange(window.location.href);是JavaScript语言在webview中的作品。 JavascriptInterface实际上打印的是网址。由于webview通过JavaScript加载网址,onPageFinished仍然传递原始网址,但实际上您已经输入了新的网址。 – 2017-07-07 13:39:09
@Shu Zhang,不工作,我的网页有一个使用JavaScript重定向但不工作。请帮忙。 – 2017-08-02 03:33:19
如果重写WebViewClient的这种方法,你将能够处理的URL变化,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");
}
}
,然后在网页视图设置WebViewClient
yxWebViewClient = new YXWebViewClient();
webview.setWebViewClient(yxWebViewClient);
这将有助于检测由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();
}
onPageFinished方法似乎至少在现代WebViews中工作。
也许这会帮助你http://stackoverflow.com/questions/6868599/unable-to-get-currnet-url-on-click-event-of-web-view-in-android ..得到当前使用onPageStarted的页面的网址,你应该设置。 – 2012-02-16 13:56:55
Thx,很棒! – Daniel 2012-02-16 14:22:05
亲切接受/ up注册回答如果你有你的 – 2012-07-02 07:57:57