javascript - Safari iframe cookie 问题

标签 javascript cookies iframe safari

我的客户站点 (siteA.com) 显示来自远程服务 (forms.siteB.com) 的表单。该表单可以在除 iOS 和 macOS 上的 Safari 之外的所有浏览器中正确加载。在 Safari 中,会显示以下 cookie 通知:您的浏览器当前设置为阻止 cookie。您必须先更改浏览器设置以允许 cookie,然后才能填写此表格。完成后您可以恢复设置。

据我所知,Safari 正在使用 ITP 并阻止第三方 cookie。我一直在阅读有关存储 session API ( https://webkit.org/blog/8124/introducing-storage-access-api/ ) 的信息,但不确定它是否会提供解决方案。该表单的 iframe 代码包括 sandbox="allow-storage-access-by-user-activation allowed-scripts allowed-same-origin",我查看了以下代码:

<script>
function makeRequestWithUserGesture() {
    var promise = document.requestStorageAccess();
    promise.then(
        function () {
        // Storage access was granted.
        },
        function () {
        // Storage access was denied.
        }
    );
}
</script>
<button onclick="makeRequestWithUserGesture()">Play video</button>

我不确定这是否适用于允许从第三方站点加载 iframe。它确实可以与用于嵌入 Google 文档表单的 iframe 配合使用。有谁知道 Google 是否做了一些特殊的事情来启用嵌入式表单来跨域设置 cookie?

最佳答案

我一直在研究这个问题,整个事情很糟糕。

你说得对,除非你可以在子域上托管表单(这不太可能),否则它不会起作用。

您需要在新窗口(或重定向当前窗口)中访问表单的域并设置 cookie,以便 Safari 知道您之前访问过该网站。然后您可以请求存储访问权限,它会弹出一个窗口,您应该没问题。

这是一次糟糕的经历,尽管很糟糕,但在新窗口中打开表单并在那里填写可以说更好。

非常令人沮丧,但由于这种隐私过度杀伤力,通过 iframe 嵌入的功能似乎即将被淘汰。

除非有人能找到更多的技巧!

关于javascript - Safari iframe cookie 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61942327/

相关文章:

HTML 视频覆盖部分下推视频

javascript - 我是否设置为正确使用 Angular Js 的 cookie

javascript - 在客户端 javascript 文件中使用 api key 有多安全?可以轻松地使用此 api key 在我的应用程序上创建对象吗?

javascript - 如何像javaScript中的函数一样执行String?

javascript - 通过输入键(不工作)或搜索按钮(工作)查询结果

ruby - 我如何使用 Sinatra 读取 cookie?

javascript - 从变量设置 cookie 值

javascript - 使用 iframe 从字符串中获取 src 和其他文本

html - 主页在加载时跳转到 iframe

javascript - 按键无法记录所有按键