我在我的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