【发布时间】:2015-09-19 22:41:27
【问题描述】:
我们的 Safari/Mac 用户报告通过 AJAX 调用定期更新的页面片段上的图像闪烁。我们无法在 Win 和 Linux 上重现 Chrome/Firefox/IE 中的行为,甚至无法在 Mac 上重现 Chrome。
我们没有可用于开发的 Mac,所以我有时只能请朋友帮我检查一下。我准备了一个简化的测试用例:https://jsfiddle.net/tgb1jaog/1/
我们使用 IMG 元素,它位于刷新后的 div 内,但对于给定页面总是相同且位于相同位置,并且在 Safari 中查看时,它会在每次刷新时闪烁 - 在真实页面和 jsfiddle 上也是如此(第一个 div)。
我尝试将其更改为 DIV 上 STYLE 设置的 CSS 背景来代替原始 IMG,这在 jsfiddle(第二个 div)上似乎工作正常,但在我们的真实页面上闪烁方式相同。
我将尝试在外部 css 中定义背景并只给 div 一个类(jsfiddle 第三个 div),但由于测试用例行为不同,我不确定它是否会有所帮助。
所有这些都可以使用不同的浏览器。
这是 Safari 中的某种错误(我找不到任何参考资料)?或者有什么方法可以让 Safari 像其他人一样工作?
function replace(id, data) {
$("#" + id).empty();
$("#" + id).append($.trim(data));
$("#" + id).hide();
$("#" + id).show()
}
function d1() {
replace("d1", '<img src="https://live.victoriatip.cz/images/baseball-header.jpg" width="797" height="69" />');
}
function d2() {
replace("d2", '<div style="background: url(https://live.victoriatip.cz/images/baseball-header.jpg); width: 797px; height: 69px;"></div>');
}
function d3() {
replace("d3", '<div class="b"></div>');
}
setInterval(d1, 2000);
setInterval(d2, 2500);
setInterval(d3, 3000);
#d3 .b {
background: url("https://live.victoriatip.cz/images/baseball-header.jpg");
width: 797px;
height: 69px;
}
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="clearfix" id="d1"></div>
<div class="clearfix" id="d2"></div>
<div class="clearfix" id="d3"></div>
【问题讨论】:
-
您是否尝试在
<img>标签上设置宽度和高度?如果您没有设置预定义的宽度和高度,浏览器在重新加载时可能会因为未知的测量值而不时闪烁。 -
@sqe 它是在真实和小提琴/sn-p 中设置的:--width="797" height="69"-- 它与图像的大小相同,所以无需调整大小。
-
你可以建个测试看看新的内容是不是和现在的一样...
-
@MrLister 我不能,“部分”的一些其他部分会改变,系统正在发送整个部分的更新 html,而不是说带有要改变的数字的 json(想在未来,但现在不能这样做)
-
Urg,我遇到了完全相同的问题。你最终找到解决方案了吗?
标签: javascript html css safari