2013年11月20日水曜日

[Android 4.4] Private browsing is not supported in WebView.

targetSdkVersion が 19 (Android 4.4 KitKat) 以上のとき、WebView(Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) で WebView のインスタンスを作成すると次の例外が起きてクラッシュする。

java.lang.IllegalArgumentException: Private browsing is not supported in WebView.
 at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:203)
 at android.webkit.WebView.(WebView.java:508)
 at android.webkit.WebView.(WebView.java:475)

この振る舞いは、クラスリファレンス WebView | Android Developers にも移行ガイド Migrating to WebView in Android 4.4 | Android Developers にも書かれていないので注意が必要。


    public void init(final Map javaScriptInterfaces,
            final boolean privateBrowsing) {
        if (privateBrowsing) {
            mFactory.startYourEngines(true);
            final String msg = "Private browsing is not supported in WebView.";
            if (mAppTargetSdkVersion >= Build.VERSION_CODES.KITKAT) {
                throw new IllegalArgumentException(msg);
            } else {
              ...
https://android.googlesource.com/platform/frameworks/webview/+/android-4.4_r1.1/chromium/java/com/android/webview/chromium/WebViewChromium.java より

WebView のコンストラクタから呼ばれる init メソッドの実装を見る限り、targetSdkVersion >= Build.VERSION_CODES.KITKAT のときでもプライベートブラウジングを利用するのは不可能にみえる。