我在jQuery mobile加载到DOM的地方看到了这个相关的问题。然而,在这种情况下,启用了ajax加载,他使用window.location
在页面之间移动。
我没有使用window.location
,只是使用普通的超链接,并且我已经关闭了ajax加载:
$(document).ready(function() {
// disable page transitions
$.mobile.ajaxEnabled = false;
$.mobile.defaultPageTransition = 'none';
}
尽管如此,如果我:
- 从A页开始
- 单击指向页面B的链接
- 点击我的Android手机上的后退按钮
- 单击链接到C页
发生以下情况:
- 页面C全部加载,包括所有JavaScript和媒体
- 出现[正在加载…]图形
- 页面A的内容加载到页面中
这是不可靠的;有时内容来自更早的页面。
请注意,在步骤3中,单击jQuery mobile生成的后退按钮会产生相同的行为。
注意,这种情况甚至发生在明确标记为data-ajax="false"
的链路上。
此外,这在桌面浏览器上并没有发生,只有安卓浏览器(它似乎也发生在iPhone上,尽管我只是通过模拟器进行了测试)。
看起来这是由pushState引起的。
来自官方文件:
重要信息:rel="external"和$.mobile.ajaxEnabled=false
不同版本的replaceState API实现略有不同浏览器在特定情况下可能会导致奇怪的行为。例如一些浏览器实现(包括桌面浏览器)实现当从外部链接和向后移动时,
popstate
事件不同到状态已被推送/替换的页面。什么时候在ajax导航所在的位置构建jQueryMobile应用程序通过频繁使用链接上的rel="external"
或通过对于$.mobile.ajaxEnabled=false
,我们建议禁用pushState功能可回退到基于哈希的导航,以实现更一致性行为
它所需要的只是在标题中添加禁用pushState的代码:
<script src="//code.jquery.com/mobile/1.0.1/jquery.mobile-1.0.1.min.js"></script>
<script type="text/javascript">
$.mobile.pushStateEnabled = false;
</script>
现在它工作了!