2013-11-22 48 views
11

的API規範讀取web視圖構造函數,允許啓用祕密瀏覽如下:從API 17開始,Android WebView中不推薦使用私有瀏覽。有什麼選擇?

(從http://developer.android.com/reference/android/webkit/WebView.html

web視圖(上下文語境,AttributeSet中ATTRS,INT defStyle,布爾privateBrowsing)

此構造函數在API級別17中已棄用。私有瀏覽不再直接通過WebView支持,並且將在未來版本中刪除。更喜歡使用WebSettings,WebViewDatabase,CookieManager和WebStorage進行細粒度的隱私數據控制。

從API 19(KitKat)開始,隱私瀏覽被禁用。嘗試調用此構造函數的值爲true會導致IllegalArgumentException。

建議的替代方法在複製隱私瀏覽的行爲方面不會有效。 CookieManager類是一個單例,所有設置都應用於整個應用程序。這種方法沒有「對隱私數據的細粒度控制」。 CookieManager提供的唯一控件是完全禁用cookie的能力,用於應用中呈現的每個WebView。這一變化意味着第三方瀏覽器不再能夠以任何身份複製Google自己的瀏覽器的隱私瀏覽功能。

我非常感謝有關解決此問題的任何建議。到目前爲止,我在API中沒有發現任何可以使前私人瀏覽功能具有任何相似性的東西。

+0

「此更改意味着第三方瀏覽器不再能夠以任何身份複製Google自己瀏覽器的隱私瀏覽功能」 - 最多限制使用「WebView」的第三方瀏覽器。還有其他的渲染選項,比如Mozilla的'GeckoView'。 – CommonsWare

+1

謝謝,我暗示使用WebView。絕對感謝GeckoView的建議,將需要檢查出來。在這個說明中,還有一個Chrome瀏覽器項目與Chrome瀏覽器引擎的目標類似:https://github.com/pwnall/chromeview我讀過這個項目在APK上增加了30+ MiB(雖然沒有親自雖然嘗試過)。我相信ChromeView和GeckoView都處於開發的早期階段。 – tliebeck

回答

2

除了我在評論中的內容,這是另一個有多個過程是合理的地方。由於CookieManager是單身人士,所以單獨的進程將具有單獨的CookieManager實例。 「隱私瀏覽」WebView實例可能處於與「常規瀏覽」WebView實例不同的過程中。

這確實有缺點:

  • 他們不能在同一個活動,從一個過程的View不能在另一個進程呈現。因此,如果瀏覽器的UI隱喻意味着單個活動(例如,標籤)中的多個WebView小部件,那麼該UI隱喻將需要被調整以允許在常規瀏覽和隱私瀏覽之間進行「上下文切換」。

  • 這將消耗更多的系統RAM,這對用戶不利,儘管對開發者來說很好(例外情況的可能性較小)。

+0

感謝您的建議...在我自己的情況下,我不介意使用第二個進程進行私密瀏覽,它甚至會添加一個額外的安全層。不幸的是,CookieManager實現似乎在這裏引發了一個問題,因爲它使用存儲在特定位置的應用程序內部數據目錄中的數據庫。兩個CookieManager實例都會試圖從同一個數據庫讀取/寫入。我不認爲有可能在單個應用程序中創建第二個用戶ID(但很想錯)。 – tliebeck

+0

@tliebeck:「因爲它使用存儲在特定位置的應用程序內部數據目錄中的數據庫」 - 雖然true,但關鍵在於「setAcceptCookie(false)」是否勝過數據庫的存在。人們希望它會。 「兩個CookieManager實例都會試圖從同一個數據庫讀取/寫入」 - 理論上講,'setAcceptCookie(false)'會導致進程不接觸那個數據庫。而且,即使他們這樣做,如果數據庫是SQLite,多個進程也可以安全地執行。 – CommonsWare

+0

謝謝,是的,這是一個SQLite數據庫。我絕對不希望私密瀏覽進程能夠在「正常」瀏覽模式下訪問潛在設置的cookie。儘管我仍然需要以私密瀏覽模式接受cookie(他們只需要在會話中存活),但我無法調用setAcceptCookie(false)。 CookieSyncManager可能在這裏很有用,但它的行爲文檔有點薄。如果它的stopSync()方法消除了與該數據庫同步的機會,那麼您的解決方案可能會起作用。 – tliebeck

相關問題