Backbone Marionette - 图像在iPad上无法可靠显示 - 竞争条件?

时间:2014-02-12 20:07:26

标签: image ipad backbone.js safari marionette

这真是奇怪的行为。甚至难以量化。不得不修改几次。

我能做的最好的事情如下:

我的应用程序的技术堆栈是Backbone Marionette,handlebars.js,require.js。

该应用包含大部分图标大小的图片 - 例如32x32及以下。一些jpg,一些png,一些svg。

某些图像,每次都是相同的图像,不显示。这是许多人发布的常见问题。没有重大新闻。

但是,如果我按下睡眠按钮,让iPad静置一两分钟直到设备真正进入休眠模式,然后恢复它,图像会慢慢地神奇地淡入。它们不会突然显示屏幕灯。它们随后就会消失。

不能只按下睡眠按钮并立即复活。必须等待一分钟,直到它真正地休眠。

真正休眠后,无论我刷新页面多少次,图像都在那里。但是,如果我去清除Safari上的缓存并加载页面,那么图像就不会再存在 - 直到我做那个休眠的东西。

所有这些图像都可以在PC上的浏览器中显示(所有口味)。它只是在iPad上,他们没有。

我想,起初,它只是我在集合视图中加载的图像。它不是。我在应用程序中有第三方HTML5视频播放器。它有一个播放按钮和svg格式的其他控件。这也表现出上述行为。

一旦iPad休眠并复活,图像就会淡入。只有清除缓存会使它们再次消失。

当图像不显示时没有404错误(在MAC上的开发控制台中检查)。事实上,如果我只是点击应该显示视频播放按钮的屏幕,播放器就会开始。所以按钮似乎实际上就在那里,只是没有画在屏幕上 - 直到你做那个休眠的东西。

无论如何,应用程序中的某些图像始终会加载。我正在查看这些图像,看看我是否可以注意到有关它们的特殊内容或呈现它们的代码。

我倾向于认为这不是图像本身,因为普通网页中的图像始终显示在iPad上。此外,普通网页中的第三方视频播放器会在iPad上显示svg播放按钮并进行控制。

只是在我的应用中,行为发生了。因此,认为我的应用程序存在问题是合乎逻辑的。我似乎无法为那些总是有效的图像找到一个共同的线程。

不确定我甚至可以在这里发布什么代码。我会看一下发帖的意义。

1 个答案:

答案 0 :(得分:0)

通过框架动态加载图像肯定是个问题。他们在那里但不画画。不知道问题到底是什么。字面上只发生在Safari移动浏览器上。无法在其他任何地方实现,甚至是旧的IE。知道一个肯定有效的解决方案。通过将它们明确地包含在标记中的div中来预加载所有图像。当您加载木偶应用程序时,删除div - $(“#preload-images”)。remove()。此后,当通过牵线木偶动态添加时,图像永远不会失败。