首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android WebView 超鏈接多次跳轉攔截:shouldOverrideUrlLoading 多 URL 處理策略

     編輯:程式設計綜合問答

問題現象

WebView 點擊超鏈接時,shouldOverrideUrlLoading 多次回調,URL 經歷重定向鏈,最終才到達目標頁面,需直接獲取最終有效 URL。

原因分析

網頁點擊鏈接常觸發 301/302 重定向鏈(如百度/hao123 導航),每次重定向都會觸發 shouldOverrideUrlLoading,參數 url 為當前跳轉的中間地址。

解決方案

  1. 記錄最後有效 URL:成員變量保存最近一次非重定向特徵的 URL
  2. 頁面加載完成後獲取:在 onPageFinished 中通過 view.getUrl() 獲取最終穩定 URL
  3. 判斷重定向特徵:過濾包含 redirect、jump、baidu.com/link 等中間頁特徵的 URL

代碼模式

private 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)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved