4

我正在尝试在 webview 中使用 javascript 设置 cookie。webview 是从本地资产目录加载的(其中 page 是一个字符串,例如“index.html”)

engine.loadUrl("file:///android_asset/" + page);

我发现当从网络(即http://www.domain.com/index.html)加载完全相同的文件时,相同的文件可以按预期设置 cookie。

旧版本的 android 允许在本地文件上创建 cookie,但新版本不允许。我已经对此进行了测试,它适用于三星 Galaxy Ace、HTC Desire Z 和较低 SDK 的 eclipse 模拟器,但不适用于三星 SIII 和三星 Tab 10.1。

我需要设置一个 cookie 以便在我的 webview 中的页面之间传输数据;保存搜索结果以重新显示。

如果有人知道解决这些本地文件问题的任何方法/技巧,我将非常感激。我已经在这工作了大约 8 周了。我问了一个类似的问题,可能有助于进一步阅读,但问题现在已经确定,并且是一个非常不同的问题,所以我在这里问这个问题。Android webview cookie 返回 null

谢谢。

4

2 回答 2

1

这是不可能的原因是由于在本地主机上实现 cookie 的安全限制。如果 cookie 设置是可能的,那么其他人也可以创建应用程序并读取您的应用程序 cookie。它曾经在早期版本的 Android 上是可能的,但后来修补了安全漏洞。

这就是为什么在传统的网络浏览器上存在同样的限制。

请参阅此相关问题和答案: Android webview cookie 返回 null

于 2017-01-04T11:38:49.480 回答
0

我一直在处理与您描述的类似的用例,这是我采用的方法

  • 每当我需要直接在 Cordova WebView 上设置 cookie(如文件方案 cookie)时:

    CookieManager.getInstance().setCookie("/", "MyCookie=xxx");
    
  • 当 JS 库创建文件方案 cookie(因为它们是从文件系统加载的)并且我需要在“本机”层上获取这些值时,我会使用:

    CookieManager.getInstance().getCookie("file://");
    

后者将返回所有文件方案 cookie 的长字符串,您可以将其拆分为一个数组并逐个解析

希望这可以帮助。

于 2017-03-06T21:49:45.413 回答