Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自API 17起,Android WebView中不推荐私人浏览。替代方案是什么?_Android_Cookies_Webview_Webkit_Privacy - Fatal编程技术网

自API 17起,Android WebView中不推荐私人浏览。替代方案是什么?

自API 17起,Android WebView中不推荐私人浏览。替代方案是什么?,android,cookies,webview,webkit,privacy,Android,Cookies,Webview,Webkit,Privacy,对于允许启用私人浏览的WebView构造函数,API规范如下所示: (来自) WebView(上下文上下文、属性集属性、int-defStyle、布尔私有浏览) 此构造函数在API级别17中被弃用。通过WebView不再直接支持私人浏览,并将在将来的版本中删除。更喜欢使用WebSettings、WebViewDatabase、CookieManager和WebStorage对隐私数据进行细粒度控制 自API 19(KitKat)起,禁用私人浏览。尝试使用true值调用此构造函数将导致Illega

对于允许启用私人浏览的WebView构造函数,API规范如下所示:

(来自)

WebView(上下文上下文、属性集属性、int-defStyle、布尔私有浏览)

此构造函数在API级别17中被弃用。通过WebView不再直接支持私人浏览,并将在将来的版本中删除。更喜欢使用WebSettings、WebViewDatabase、CookieManager和WebStorage对隐私数据进行细粒度控制

自API 19(KitKat)起,禁用私人浏览。尝试使用true值调用此构造函数将导致IllegalArgumentException


建议的替代方案在复制私人浏览行为方面甚至不会有丝毫效果。CookieManager类是一个单例,所有设置都应用于整个应用程序。这种方法没有“隐私数据的细粒度控制”。CookieManager提供的唯一控制功能是为应用程序中的每个WebView完全禁用Cookie。这一变化意味着第三方浏览器不再能够以任何能力复制谷歌自己浏览器的私人浏览功能


我非常感谢任何关于解决这种行为的建议。到目前为止,我在API中还找不到任何与以前的私有浏览功能类似的东西。

除了我在评论中所说的,这是另一个有多个进程的地方。由于
CookieManager
是一个单例,因此单独的进程将有单独的
CookieManager
实例。“私人浏览”
WebView
实例可以与“常规浏览”
WebView
实例处于单独的过程中

这确实有缺点:

  • 它们不能在同一活动中,因为来自一个进程的
    视图不能在另一个进程中呈现。因此,如果浏览器的UI隐喻意味着单个活动(例如选项卡)中有几个
    WebView
    小部件,则需要调整该UI隐喻,以允许在常规浏览和私人浏览之间进行“上下文切换”

  • 这将消耗更多的系统RAM,这对用户不利,但对开发人员有利(发生
    OutOfMemoryError
    异常的可能性较小)


“这一变化意味着第三方浏览器不再能够以任何能力复制谷歌自己浏览器的私人浏览功能”——最多,它限制了使用
WebView
的第三方浏览器。还有其他的渲染选项,比如Mozilla的
GeckoView
。谢谢,我是在暗示使用WebView。非常感谢GeckoView的建议,需要查看一下。在这一点上,还有一个ChromeView项目与Chrome引擎有着相似的目标:我确实读到这个项目在APK大小上增加了30+MiB(不过我个人没有尝试过)。我相信ChromeView和GeckoView都处于开发的早期阶段。谢谢你的建议……在我自己的情况下,我不介意使用第二个进程进行私人浏览,它甚至会增加一个额外的安全层。不幸的是,CookieManager实现在这里似乎造成了一个问题,因为它使用了存储在应用程序内部数据目录中特定位置的数据库。这两个CookieManager实例都将尝试从同一数据库进行读/写操作。我认为不可能在单个应用程序中创建第二个用户id(但很可能是错误的)。@tliebeck:“因为它使用存储在特定位置的应用程序内部数据目录中的数据库”——如果是真的,关键是
setAcceptCookie(false)
是否胜过数据库的存在。人们希望它会。“两个CookieManager实例都会尝试从同一个数据库读/写”--理论上,
setAcceptCookie(false)
会导致进程不接触该数据库。而且,即使他们这样做了,如果数据库是SQLite,多个进程可以安全地访问它。谢谢,是的,这是一个SQLite数据库。我绝对不希望私人浏览过程能够在“正常”浏览模式下访问可能设置的cookies。我仍然需要在私人浏览模式下接受cookie(它们只需要在会话中存活),但我不能调用setAcceptCookie(false)。CookieSyncManager在这里可能会很有用,但它的行为文档有点少。如果它的stopSync()方法消除了与该数据库同步的任何机会,那么您的解决方案可能会工作。到目前为止,我还无法使Cookie(Sync)管理器按预期运行。当第二个(私人浏览)过程完成时,cookies将同步。我仍然需要更多地使用它,并深入研究Android代码。我知道这个话题已经很老了,但我面临着同样的问题。我想处理多个webview,其中一些处于“正常”浏览模式,另一些处于私人浏览模式。您是否找到了可靠的解决方案或解决方法?我试图保存房间数据库中的所有cookie,并在每次需要“正常”浏览模式时将其还原,但不幸没有成功。