一些背景信息;
默认情况下,当您单击链接到单独的HTML页面时,JQM会加载该页面上的第一个data-role="page"并将其附加到第一个页面的DOM中,问题在于JQM仅加载该页面div而不加载任何位于容器外部的脚本等。
我有一个jQuery移动应用程序,其中包含5个页面:"login.html","menu.html","account.html","settings.html"等。
我使用以下方式更改页面;
$.mobile.changepage("account.html")
我将所有页面加载逻辑都放到了我的第一个页面login.html中,像这样;
<script>
$(document).on('pageinit', '#loginpage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
$(document).on('pageinit', '#accountpage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
$(document).on('pageinit', '#settingspage', function() {
//do some stuff run some ajax scripts and add some html to its body
});
</script>
虽然这个应用程序工作得很好,但问题在于我发现它非常脆弱,难以从意外错误中恢复。例如:
由于每个页面的 body html 如何加载是在 login.html 中定义的,这意味着如果用户手动刷新其中任何一个页面,页面将在不运行那些脚本并且没有 body 的情况下加载。此时,由于正确的 DOM 已从内存中删除,用户被困在一个空白页面的应用中,唯一的方法是他足够聪明地去输入 "login.html" 到地址栏,然后所有流程才能顺利地开始。
我认为我们无法完全隐藏地址栏,它在向下滚动后又可见了。
所以这是我遇到的一个问题,还有一些奇怪的事情可能会发生,如果某种方式导致 DOM 损坏,使用应用程序的唯一方法就是在地址栏中键入 login.html,而用户可能不会考虑到这一点。
如何使这个应用程序更加健壮,例如检测任何 DOM 损坏或刷新,并将用户转发到 login.html,以便他不会被困在一个有空白页面的应用程序中。