2012-02-16 141 views
9

我在我的android應用程序中有一個webview,並希望檢測到de url更改時。Android檢測webview URL更改

我想用這個來隱藏頂部欄中的info按鈕,當用戶在info.php頁面上時,當他不在info.php頁面上時再次顯示它。

我使用Google搜索,但找不到任何工作代碼,任何人都可以幫我嗎?

Thx提前!

+1

也許這會幫助你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

+0

Thx,很棒! – Daniel 2012-02-16 14:22:05

+0

親切接受/ up註冊回答如果你有你的 – 2012-07-02 07:57:57

回答

8

您可以使用WebViewClient.shouldOverrideUrlLoading偵測到您的WebViewClient每個URL變化

+8

它不能檢測到URL改變的JavaScript不會導致網頁重新加載。 – 2013-06-13 17:21:33

+0

@HelinWang有沒有其他檢測方法 – 2013-10-10 12:49:37

+0

@HelinWang,你有沒有檢測到JavaScript重定向的代碼? – 2017-08-02 04:52:09

0

嘗試使用onLoadResource。即使您使用 JS來更改您的網址,它也會至少被調用一次。但它可能被稱爲不止一次,所以要小心。

1

我有一個有趣的問題,帶給我這個問題,並樂意提供一個解決方案,可以幫助別人,如果他們來這樣做,由於谷歌雅虎搜索。

mwebVew.reload()不會從我首先登錄用戶或註銷用戶的首選項屏幕返回時加載的新URL。它將更新共享首選項,但不更新並替換url網頁。因此,在幾個小時沒有看到答案後,我嘗試了以下方法,並且它的工作非常棒。

mWebView.resumeTimers(); 

在這裏,如果你想了解更多的信息是link to the doco

希望它救了別人我經歷過的痛苦,並高興地有人告訴我,我應該以另一種方式實施它。

10

對於那些通過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); 
    } 
} 
+0

爲什麼在使用MyJavaScriptInterface時可以直接在onPageFinished中工作? – 2017-07-07 10:08:15

+1

javascript:window.android.onUrlChange(window.location.href);是JavaScript語言在webview中的作品。 JavascriptInterface實際上打印的是網址。由於webview通過JavaScript加載網址,onPageFinished仍然傳遞原始網址,但實際上您已經輸入了新的網址。 – 2017-07-07 13:39:09

+0

@Shu Zhang,不工作,我的網頁有一個使用JavaScript重定向但不工作。請幫忙。 – 2017-08-02 03:33:19

4

如果重寫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); 
-1

這將有助於檢測由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(); 
} 
0

onPageFinished方法似乎至少在現代WebViews中工作。