在 Firefox 中使用 srcdoc 时,iframe 内容不使用父 cookie,在 chrome 中工作

pae*_*dnt 6 cookies iframe firefox

我有一个像这样的html结构

<html>
   <body>
     <iframe srcdoc="HTMLDOC"></iframe>
   <body>
</html>
Run Code Online (Sandbox Code Playgroud)

其中 HTMLDOC 是一个 HTML 文档,其中包含一些<img>标签,这些标签显示我的服务器中的图像,用户必须经过身份验证才能看到这些图像。

这在 Chrome 上完美运行,但在 Firefox 上尝试时,浏览器发出的获取这些图像的请求不会发送用户的 cookie,因此不会下载图像(因为服务器认为用户未经身份验证)。

如果我将 iframe 转换为“经典”iframe,如下所示:

<iframe src="URL INSIDE MY SERVER"></iframe>
Run Code Online (Sandbox Code Playgroud)

其中 URL INSIDE MY SERVER 是一个端点,它提供相同的 HTMLDOC,它在 Chrome 和 Firefox 中都可以工作,在请求中发送适当的 cookie 以获取图像。

我也尝试sandbox="allow-same-origin allow-top-navigation allow-scripts" 使用 srcdoc 将参数添加到 iframe,但无济于事。

奇怪的是,如果这是同源情况,我想不出比 HTML 本身包含页面更清晰的同源情况,所以我不知道我是否遗漏了一些东西。

小智 0

我不确定 Chrome 和 Firefox 之间的实现是否存在差异,但我使用一些 DOM 操作来绕过这个问题:

<html>
  <body>
    <iframe onload="fillIframe(this);"></iframe>
  </body>
</html>

<script type="text/javascript">
  function fillIframe(o) {
    o.contentWindow.document.body.innerHTML = "HTMLDOC";
  }
</script>
Run Code Online (Sandbox Code Playgroud)