【问题标题】:Setting Cookies using JavaScript in a local html file在本地 html 文件中使用 JavaScript 设置 Cookie
【发布时间】:2011-09-08 02:34:56
【问题描述】:

我有以下目录树:

+ folder1
|--- folder2
|------ page1.html
|--- page2.html

如果我使用 JavaScript 在page1.html 中设置一些 cookie,该 cookie 使用的路径是什么?

编辑:
让我更好地解释一下。我正在使用本地文件。 page1.html 正在通过 /home/user/.../folder1/folder2/page1.html 访问,而不是通过使用 HTTP 服务器的客户端计算机。

澄清一下:
似乎某些浏览器(如 Chrome)在使用 file:/// 时不存储 cookie,但 Firefox 和 Internet Explorer 都可以。

【问题讨论】:

  • Cookie 它独立于创建它的页面,“路径”仅包含网站域。 (假设您指的是出现在浏览器 cookie 列表中的 cookie 名称)
  • 查看我的编辑。我不知道为什么我投了反对票:(
  • 对不起,以为你没有检查一些基本信息 - 忽略。
  • 有人知道 Firefox 57 中是否添加了这个“功能”吗?我正在尝试调试一个问题——我的本地脚本曾经在 FF 中工作到 57 岁,现在它似乎丢失了 cookie。我的假设之一是 FF 已转到无本地 cookie 默认值。然而,网络搜索几乎是不可能的;你得到的只是关于如何启用/禁用 cookie 或附加 cookie 管理器的噪音。这个问题是我最接近的。

标签: javascript cookies cross-browser local-files


【解决方案1】:

对于仍在寻找方法的人,请尝试设置 URL 参数而不是 cookie

我下载了一些 HTML 格式的小说以供离线阅读,但无法使用 cookie 将先前设置的字体大小传递给下一章,所以我所做的如下所示:

  1. 首先添加一个寡妇事件侦听器,该侦听器在单击链接(到下一个通道)时添加字体大小参数
  2. 然后是window.onload函数,它接受参数值并改变字体大小

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>
    <a href="ch-02.html" >Next Chapter</a>
    <p id="content">Hope this helps</p>
    
<script>
var fontSize = 1;
window.addEventListener("click", function(e) {
    var href = e.target.getAttribute("href");
    if(href) {
        location.href = href + "?fontSize=" + fontSize;
        e.preventDefault();
     }
})
window.onload = function(){
  var url = new URL(window.location.href);
  var value = url.searchParams.get("fontSize");
  if(value != null){
    fontSize = parseFloat(value);
    document.getElementById("content").style.fontSize = fontSize + "em";
  }
}
</script>
    
  </body>
</html>

【讨论】:

    【解决方案2】:

    作为解决方法,您可以使用 Tampermonkey 访问本地文件 (How to include Local htm pages in a Tampermonkey script?) 通过这种方式,您将使用 Tampermonkey 的存储,并且能够通过函数 GM_getValue(data) 和 GM_setValue(data) 设置和获取数据。我将它用于我的本地 HTML 页面,我将其用作 Windows 资源管理器的可定制替代品

    【讨论】:

      【解决方案3】:

      如果您使用的是 Mac,则可以关闭 Chrome 并重新启动它:

      /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-file-cookies
      

      然后您就可以在本地文件上设置 cookie。

      【讨论】:

      • +1:这行得通。用于终端。我必须删除“--enable-file-cookies”标志上的第二个破折号,所以它应该看起来像:open /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome -enable-file-cookies
      【解决方案4】:

      为 chrome 设置 --enable-file-cookies ,它应该适合你。此外,您还必须设置“接受所有 cookie”才能使某些功能正常工作,但如果您这样做了,请确保在重新联机之前设置回去。

      【讨论】:

      • 如何设置--enable-file-cookies 它在chrome://flags 的某个位置??
      • @Mostafa ,我认为他的意思是运行 chrome --enable-file-cookies 。但它不适用于我的 Windows 7 SP2 for Chrome v81.0.4044.138 64 位。
      【解决方案5】:

      来自MDC page for document.cookie

      如果未指定,[path 参数] 默认为当前文档位置的当前路径。

      所以在你的情况下,它将是/folder1/folder2/


      我最初没有看到您在问题标题中指定了“本地”——不确定在我写答案时这是否已更新。使用file:/// 协议浏览时不会设置Cookie,具体取决于浏览器。

      【讨论】:

      • @Oscar 看看我的,距离你的大约 20 像素!
      • 是的,这似乎就是问题所在。 IE 和 Firefox 确实使用 file:/// 设置 cookie,但 Chrome 不这样做 :) 无论如何,我认为您的答案对于 IE 和 Firefox 是正确的。
      【解决方案6】:

      浏览器不会为 file:// url 协议存储 cookie,它会简单而无声地设置任何内容。因此,如果这是真正的“本地”而不是在域上,您可能会遇到问题。

      【讨论】:

      • 他们似乎做到了。我在page1.html 中设置了一个cookie,然后关闭浏览器,再次打开页面(当然是在本地),然后我要求那个cookie,它仍然存在:?
      • @Oscar 我认为这是一个跨浏览器的事情。与 Firefox 或 Internet Explorer 相比,Chrome 对同源策略的解释略有不同,尤其是在 file:/// 协议方面。
      • 在我的情况下,它在 Firefox 77 中有效,在 Chrome 83 中无效。两者都在 Ubuntu 20 上
      猜你喜欢
      • 2016-09-18
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多