为什么只有 iOS 的 iframe 是空白的?

Why is iframe blank only with iOS?

有一个 html 页面可以在任何 Windows 和 Android 上正常工作(显示 iframe 的内容)。由 Github 页面托管。 在 iOS 版本 12.5.1 有效 ,但 14.6 无效 ([=72 上的空白页=]、Safari、Opera)。为什么?

  • 尝试 srcwikipedia - 一切正常。问题缩小到 iframe 和 src 应用程序脚本的组合(单独正确打开)
  • 假设问题根据混合http/https。刚才http的样式是http://www.w3.org/2000/svg,我改成了https(连样式都去掉了)。没有效果。
  • 没有日志错误,只有空白页。似乎试图加载,但中断并停止。我没有 ios 设备来调试。反馈用户。

如果你有iOS14,可以尝试打开this site。您看到什么空白页或访问错误?

下一个错误是对的。它告诉你没有访问权限。

Refused to display 'accounts.google.com/…' in a frame because it set 'X-Frame-Options' to 'DENY

如果您登录 Google Account 并重试,Google Drive 会出错。我在任何平台上都以隐身模式拥有所有这些。别理他们。

只有对空白的情况感兴趣screen/stop加载如下截图

iOS14.6

Windows

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Goofy</title>
    <style>
        html, body, iframe { width: 100%; height: 100%; margin: 0; border: 0; }
    </style>
</head>
<body>
    <iframe src="https://script.google.com/macros/s/AKfycbzmAfVL_ozEP69vpYvMo3t1Qlc4orPfk7eV5rWT/exec"></iframe>
</body>
</html>

Apps 脚本渲染页面 XFrameOptionsMode.ALLOWALL

function doGet() {
    return HtmlService.createHtmlOutputFromFile('launch.html')
             .addMetaTag('viewport', 'width=device-width, initial-scale=1')
             .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

您不能构建某些网站,因为服务器出于安全原因不允许您这样做(假设一个随机页面嵌入您的 gmail 并窃取您的所有数据)。因此,您将不得不修改 google 脚本上的宏,并且可能会询问其他问题以了解您正在尝试做什么。 X-Frame-Options

是浏览器端的问题。由于第 3 方 cookie,Safari 将阻止内容。除非用户自行设置,否则偏好允许所有 cookie。到目前为止,我只知道 Safari 会执行此操作。其他浏览器,我认为来自第 3 方的 iframe 中的内容没问题。

现在默认阻止跨站点资源的 Cookie (iOS 13+)。 Source。其他平台(iOS 12、Windows、Android)不会这样做。此类 cookie 需要使用 iframe 和 google src 验证 github.io 上的用户。这就是为什么我在 iOS 14.

上看到空白页的原因

解决方法是转到浏览器的设置并允许第 3 方 cookie。

谢谢