【问题标题】:Safari iframe cookie issuesSafari iframe cookie 问题
【发布时间】:2020-05-22 19:27:15
【问题描述】:

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

据我所知,Safari 正在使用 ITP 并阻止第三方 cookie。我一直在阅读有关存储会话 API (https://webkit.org/blog/8124/introducing-storage-access-api/) 的信息,但不确定它是否会提供解决方案。表单的iframe代码包括sandbox="allow-storage-access-by-user-activation allow-scripts allow-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 Doc 表单的 iframe。有谁知道 Google 是否做了一些特别的事情来使嵌入式表单能够跨域设置 cookie?

【问题讨论】:

    标签: javascript cookies iframe safari


    【解决方案1】:

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

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

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

    这是一种糟糕的体验,尽管很糟糕,但可以说最好在新窗口中打开表单并在那里填写。

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

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

    【讨论】:

    • 那么 requestStorageAccess 是不是永远无法在 iFrame 情况下工作?
    • 它确实有效,但对访问者来说只是一个尴尬的过程。对于我自己的项目,我最终完成了这项工作,以便我的 iframed 网站将响应父网站的子域。客户必须设置适当的 DNS 记录。这可以在没有任何弹出窗口或重定向的情况下工作,但在许多情况下显然是不可能的。
    猜你喜欢
    • 2012-04-11
    • 1970-01-01
    • 2014-04-01
    • 2013-06-14
    • 2011-01-02
    • 2019-07-03
    • 2020-04-30
    • 2012-10-08
    • 2011-06-06
    相关资源
    最近更新 更多