尝试从安全来源与其顶级框架不同的文档启动 Apple Pay 会话

Trying to start an Apple Pay session from a document with an different security origin than its top-level frame

问题:

我的网站上有 ApplePay (https://www.example.com/order),它可以使用并成功付款。

现在我尝试将包含 apple pay 的子域 (https://sub.example.com) 中的 IFrame (src="https://www.example.com/order") 与表单集成,但出现错误

Trying to start an Apple Pay session from a document with an different security origin than its top-level frame

两个站点都使用了 Https。

主域(有和没有 www)和子域在 apple 开发者帐户中验证。

您不能将 Frames 与 Apple Pay 一起使用,因为这被认为是不好的做法

这个错误可以在webkit中找到source

if (!ancestorDocument->securityOrigin().isSameSchemeHostPort(topOrigin))
    return Exception { InvalidAccessError, "Trying to start an Apple Pay session from a document with an different security origin than its top-level frame." };
}

isSameSchemeHostPort 函数checks iframe 和页面的协议、域和端口相同

return a.protocol == b.protocol
    && a.host == b.host
    && a.port == b.port

因此,框架和页面的协议、域和端口必须相同才能将 iframe 与 ApplePay 集成。