从资产目录中的HTML文件设置Android Webview cookie

时间:2013-10-17 22:19:48

标签: javascript android cookies webview

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

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

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

较早版本的android确实允许在本地文件上创建cookie,但较新版本不允许。我测试了这个,它适用于三星Galaxy Ace,HTC Desire Z和较低SDK的eclipse模拟器,但不适用于Samsung SIII或Samsung Tab 10.1。

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

如果有人知道任何方法/黑客来解决这些本地文件问题,我真的很感激它。我已经在这里待了大约8个星期了。我问了一个类似的问题,可能有助于进一步阅读,但问题现在已经确定,并且是一个非常不同的问题所以我在这里问这个问题。 Android webview cookie returns null

感谢。

2 个答案:

答案 0 :(得分:1)

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

这就是传统网络浏览器存在同样限制的原因。

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

答案 1 :(得分:0)

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

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

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

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

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

希望这有帮助。