【问题标题】:Browser issues related to cookie reading from javascript与从 javascript 读取 cookie 相关的浏览器问题
【发布时间】:2013-08-14 12:42:40
【问题描述】:

在设置 cookie 和从 java 脚本获取相同信息时,我遇到了不同浏览器的问题。

  • 在 Firefox 中一切正常,即设置 cookie 并在 6 个月后过期。
  • 但在 IE 中确实设置了 cookie,但会随着浏览器会话过期。
  • 对于 Chrome 的 cookie 并非全部读取和设置。

我已经尝试了很多实验,但我无法获得预期的解决方案。我做错了什么?

【问题讨论】:

  • 如果 IE 中的 cookie 在会话结束时消失,或者您没有正确计算 EXPIRES 属性,或者您的页面在第 3 方上下文中运行并且您被阻止P3P 政策(点击查看 > 网页隐私政策查看降级 cookie 列表)
  • 您在上面显示的错误消息意味着您有一个使用 HTTP URL 下载 JavaScript 库的 HTTPS 页面。 HTTPS 页面无法在 IE 中下载 HTTP 内容(出于安全原因),我相信现在 Chrome 和 Firefox 也阻止了此类下载。

标签: javascript internet-explorer google-chrome firefox browser


【解决方案1】:

我认为这部分看起来不正确:

// Store the cookie
Cookie.prototype.store = function () {
    var cookieval = "";
    for(var prop in this) {
        // ...
        cookieval += prop + ':' + escape(this[prop]);
    };
    // ...
};

基本上,这会遍历每个全局 Javascript 变量(与 cookie 无关)并将它们添加到 cookie 值中。这真的是你想要的吗?当我在 Chrome 中运行以下命令时,查看输出:

这将是一个巨大的 cookie。


除此之外,您看到的错误看起来像是同源政策的问题。除非外部域具有特殊设置,否则您不能从页面域之外的域引用 Javascript。谷歌有一些特殊设置的服务器,所以如果你不想在你的服务器上托管 jquery 文件,你可以使用这个 URL:

https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js

不过,老实说,您似乎有很多问题需要处理(跨域问题、未定义的 jQuery、跨浏览器兼容性)。您可能应该尝试简化您的代码,看看它是否适用于简单的情况。与其将所有 Javascript 变量存储在 cookie 中,不如看看您是否可以只在 cookie 中存储一个简单的字符串值,并查看您的代码是否与跨浏览器兼容。如果可行,请尝试添加过期时间,然后添加域/路径等。这样您就可以一次专注于一个问题。

【讨论】:

  • 它在 Firefox 中做同样的事情。我已经更新了我的答案。
  • 是的,对同一页面域的库引用已帮助解决了该问题。再次感谢。
  • 提供 jQuery 库的 URL 无关紧要;您只需在 <script> 标记中使用相同的 URL。如果您在 /core/library/js/jquery/jquery.min.js 提供 jQuery,您的 HTML 页面需要有 <script src="/core/library/js/jquery/jquery.min.js"></script>
  • 另外,正如 EricLaw 所说,您的页面是通过 HTTPS 访问的;因此 Google URL 也必须是 HTTPS:(https://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js)。仅供参考。
  • 我不知道。您发布的代码与 hub.js 没有任何关系。
猜你喜欢
  • 1970-01-01
  • 2011-08-14
  • 2012-06-03
  • 2017-09-24
  • 2015-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
相关资源
最近更新 更多