WebView 點擊超鏈接時,shouldOverrideUrlLoading 多次回調,URL 經歷重定向鏈,最終才到達目標頁面,需直接獲取最終有效 URL。
網頁點擊鏈接常觸發 301/302 重定向鏈(如百度/hao123 導航),每次重定向都會觸發 shouldOverrideUrlLoading,參數 url 為當前跳轉的中間地址。
onPageFinished 中通過 view.getUrl() 獲取最終穩定 URLredirect、jump、baidu.com/link 等中間頁特徵的 URLprivate String lastValidUrl;
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (isRedirectUrl(url)) {
return false; // 讓 WebView 繼續加載重定向
}
lastValidUrl = url;
return false;
}
@Override
public void onPageFinished(WebView view, String url) {
String finalUrl = view.getUrl(); // 最可靠的最終 URL
// 業務邏輯使用 finalUrl
}
private boolean isRedirectUrl(String url) {
return url.contains("redirect") || url.contains("jump") || url.contains("baidu.com/link");
}
setDomStorageEnabled(true) 確保重定向過程中狀態保持WebViewClientCompat 適配不同 API 級別shouldOverrideUrlLoading 返回 true 並手動 view.loadUrl(finalUrl)