iOS 有时在不同子域名之间导航时不会加载 CSS

我不得不承认这很难重现!它非常不稳定,我们找不到规律。

2 个赞

@pmusaraj 快速提问 -
您认为这与 Discourse 整体有关还是与特定主题有关?我还没有确定是哪个组件,但想知道这是否能解决问题?

我认为这不是特定的主题或组件,它很可能与 Discourse 整体有关。我本周早些时候在一个几乎没有安装任何组件的 Discourse 站点上重现了它。

3 个赞

谢谢分享!这很令人沮丧,因为用户体验很糟糕,用户不得不重新加载页面或返回。我只是想主动寻找一个变通方法。

1 个赞

新的 discourse discover 子域(Safari 桌面版)出现了此问题:

似乎是随机发生的,不经常。发生这种情况时,有没有办法运行诊断测试来找出问题?

4 个赞

根据我们到目前为止的分析,discourse 子域认为它仍然是主机,然后任何相对资产/链接都会中断。这意味着,除非您使用绝对路径(例如 discourse.org/css/main.css 而不是 /css/main.css),否则它将起作用。但这是一种非常疯狂的解决方法,因为它会包含任何图标、图像、href、js、css 等。

1 个赞

这发生在桌面版和移动版 Safari 上。

  • 必需的页面部分(外部域)仍然出现在 Discourse 的日志中,而它们应该记录在外部域上。无法调试何时发生 :frowning:
  • 一个解决方法(而不是将所有 CSS/JS/HREF 更改为绝对路径)是将 <base href="https://mydomain.com/"> 放在所有相关页面(在外部域上)的标题中 :zipper_mouth_face:
2 个赞

我刚刚报告了一个相关问题,然后有人指出这个问题,看起来是相关的。

我们两天前刚升级到 Discourse 3.2,从那时起我们就收到了类似问题的报告。虽然在我们的案例中不是 CSS 相关的问题,但我认为问题本质上是相同的。

在 Discourse 中点击链接到我们的主网站后,浏览器仍然认为它在论坛上:浏览器中的 URL 如此(!),有时(一些?可能是相对的)链接会在论坛域中打开,并显示论坛页面不存在的错误。我们目前收到的报告都是在 iPhone/iPad 上。我完全无法重现它,但受影响的人似乎每天都会遇到几次。查看 Discourse 日志,我可以确认有几个 404 请求指向只存在于我们主网站上的页面。

我非常困惑浏览器打开一个网站却显示另一个网站的 URL(没有 iframe)。这肯定是 Safari 的一个 bug,我只希望它仅限于顶级域内,否则安全隐患相当严重。

无论如何,我认为需要记住的是,这个问题是在我们升级到 Discourse 3.2 后才开始发生的,所以 3.1 版本之后肯定有什么东西被更改了,从而触发了这个问题。

也许是完全瞎猜,但我不知道这是否可能与 PWA 应用以及 Safari 如何处理它们有关?我们的主网站声明了一个 PWA 应用——我们的 Discourse 论坛也是如此。两者都是 standalone 并且带有 start_url: \"/\"(我们的设置了一个唯一的 id,但 Discourse 没有)。据我所知,PWA manifest 文件没有指定它们运行的特定主机名,所以我假设它会坚持它们托管的特定主机名。在我们的案例中,这两个 PWA 位于不同的子域但属于同一域;浏览器在处理这个问题时可能会出现混乱并导致浏览器混淆。但同样,这只是纯粹的猜测。

2 个赞

如果这是一个通用链接(在我们的例子中,它是顶部的导航图标),也许 target=_blank(甚至 target=_top?)可以作为临时的替代方案?

据我回忆,我们也尝试过将HREF替换为JS:function,它执行了“window.open”但结果仍然一样。
请记住:它确实获取了外部页面——因此DNS到这个新域工作正常,但是,在执行脚本和获取该页面的相对路径资源时,它并没有切换到该域。所以正如我所说,内部Safari“base”HREF没有被页面获取更新/切换——这导致它相对于当前“base”域加载——> 404

是否可以故意从 discourse 加载 JS 或 CSS?

我已经尝试了 target=_blank 方法,到目前为止所有的报告都表明问题已经解决了。虽然不完美,但在有更多明确信息之前,有一个临时的解决方法还是不错的。

FWIW,这不仅发生在用户主动点击链接时,也发生在 JavaScript 的“重定向”时。

我们在论坛上使用 SSO,并将 logout redirect 设置为主网站的 URL。当用户从论坛注销并被 Discourse “重定向”到我们的主网站时,这也会在 Safari 中触发此问题。从控制台来看,这不是实际的 302 重定向,所以可能是 window.location。

感谢各位的讨论和调试。

这个解决方法很简单,可以尝试一下,所以我通过一个主题组件将其添加到了这个网站(meta.discourse.org)上。如果它能解决问题,那将非常巧妙,因为我怀疑它可以帮助 Webkit 开发者调试根本问题。(另外,我们也可以评估默认将 base 标签添加到 Discourse 核心。)

我的理解是,当 base 标签的变通方法应用于外部网站时可能会有帮助,因为问题似乎发生在离开 discourse 网站之后。

测试是在 meta 上进行的,以处理两个不同 discourse 实例之间链接的特定情况吗?或者,我是否迷失了(很有可能!:sweat_smile:)?

1 个赞

是的,我们最常见的问题是两个 discourse 实例之间的链接。我认为 base 标签的变通方法也可以提供帮助,如果它在源站点上使用(并且目标不是 Discourse 实例)。如果根本问题是 Safari/Webkit 混淆了基本 URL(这与你上面关于 PWA 的推测不远),那么在任一站点上添加不同的 base 可能会有助于打破错误的假设,而这是问题的根源?这也是我的猜测,但值得一试。

1 个赞

这会破坏私信按钮吗?
我直到禁用主题并启用安全模式才起作用。

1 个赞

抓得好,它确实似乎会破坏它。我已暂时禁用带有 base 标签的组件。

3 个赞

您好 :wave: 我不知道这是新问题还是旧问题,但我在 iPad 上试了一下。我注意到每次在浏览器导航或滑动操作后更改页面时都会发生这种情况。有时在其他情况下也会发生。在 Meta Branded 主题主页上很容易复现。使用搜索栏按钮。

视频中,第一次使用浏览器导航返回。第二次使用滑动操作返回。第三次点击 Logo 返回。

7 个赞

太棒了,是的,这些步骤每次在桌面版 Safari 上都会重现此问题。干得好,@Don :raised_hands:

文本形式:

  1. 在 Safari 中打开 meta.discourse.org

  2. 点击“Guides”

  3. 返回(使用按钮、手势、键盘快捷键等)

  4. 点击“Our Hosting”,这是一个指向 discourse.org/pricing 的链接

  5. 观察页面损坏。window.location 仍然是 meta.discourse.org,但 HTML 来自 discourse.org/pricing

9 个赞