带有位置“固定”在iframe中的元素不在Safari中呈现

问题描述:

我们遇到问题,其中iframe中的position: fixed;元素未呈现正确。我们只在Safari的macOS上注意到这一点。带有位置“固定”在iframe中的元素不在Safari中呈现

下面是它应该如何看:

enter image description here

这里是Safari浏览器在Mac OS看起来像(在页面加载):

enter image description here

在页面加载的顶部和底部酒吧不可见。它们在DOM中占据空间并且可以被点击,但是它们没有被浏览器“渲染”。正如你在上面的图片中看到的那样,条形显示为空白。

如果我们强制通过JS,CSS重新绘制或通过调整浏览器大小将出现条。然而,我们并没有寻找如何强制重绘的解决方案。我们的问题是为什么这首先发生?

你可以在这里找到一个活生生的例子:

https://testing.enuvo.ch/user/collect/#collector#/user/overlay

PS:这并不总是发生。有时,在调整浏览器大小并再次尝试时,它会正确显示。我们希望你能重现这个问题。

+0

不确定在重绘但我想指出的问题,您的noscript块呈现您喂它的文本的标签。 – abluejelly

+1

@abluejelly感谢您的通知。当我们将源代码复制到这个测试服务器上时(为了让您可以访问它),这一定是发生了。 – Lionel

我试过你的例子,是的,这真的很奇怪。 你有没有想过缓存问题? Safari有缓存iframe的独特行为,也许你的问题来自这些。

您可以尝试更改此iframe的HTTP标头以禁用像这样的缓存吗?

Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0 

这里是PHP的例子:

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1. 
header('Pragma: no-cache'); // HTTP 1.0. 
header('Expires: 0'); // Proxies 
+0

不幸的是没有工作,它仍然在发生。你可以在这里看到它:https://testing.enuvo.ch/user2/collect/#collector#/user2/overlay/ – Lionel

+0

只要确定,你可以在iframe的链接上做一个快速的改变吗? 你能改变当前链接: /user2/overlay /?t =时间戳 或在php中: /user2/overlay /?t = –

+0

完成!尽管如此: -/ – Lionel

你必须写在iframe的文件没有您的视图文件的CSS。

+0

Pla不会为您的答案添加不相关的链接,因为这些链接可能会被报告为垃圾邮件。 – Shadow

所以有一些故障position: fixedz-index。一些较旧的浏览器对待它有点不同,并以不同的方式处理堆叠上下文。

有点试验和错误之后,我已经成功加入让它与注入样式表的工作:

#ol-main-header, 
#cl-footer { 
    -webkit-transform: translateZ(0); 
} 

你也应该能够去除unnecesarry z-index: 99999。希望有所帮助。

+0

尽管它在Safari中似乎可以正常工作,但是在Windows上的Chrome中打开叠加层时,它会增加明显的“jank”: - /以任何方式解决此问题? – Lionel

+0

没有看到它有点难以说出什么问题。如果你可以在测试环境中做更改,我可以检查它。 –

+0

这里你去:https://testing.enuvo.ch/user3/collect/#collector#/user3/overlay/ – Lionel