2015-09-19 48 views

回答

13

谷歌修改shouldInterceptRequest方法使用WebResourceRequest請求而不是字符串URL

不,他們增加了shouldInterceptRequest()方法。兩者均可在API Level 21+中獲得; String變體可用於API Level 11+。雖然String被標記爲已棄用,但爲了向後兼容,String變體應支持相當長一段時間。

有什麼辦法可以寫一個泛型類來擴展WebViewClient並處理這兩種方法嗎?

內置實施WebResourceRequest版本的shouldInterceptRequest()只是調用String實施shouldInterceptRequest()

public WebResourceResponse shouldInterceptRequest(WebView view, 
     WebResourceRequest request) { 
    return shouldInterceptRequest(view, request.getUrl().toString()); 
} 

(從the source code截至目前)

所以,你有兩個選擇:

  1. 只需覆蓋String版本,如果您不需要WebResourceRequest,它將用於所有相關API級別。

  2. 覆蓋兩者,知道WebResourceRequest將用於API Level 21+,而String版本將用於API Level 11-20。

+0

謝謝CommonsWare,其實我所做的就是實現這兩種方法並用'@TargetApi(Build.VERSION_CODES.LOLLIPOP)'從API21之一。 – Krystian

+0

我認爲重寫字符串版本應該很好。 –