一些背景;
默认情况下,当您单击指向单独 HTML 页面的链接时,JQM 会加载该页面上的第一个 data-role="page" 并将其附加到第一页的 DOM,事情是 JQM 仅加载该页面 div 而不是任何脚本等在该容器之外。
我有一个 jQuery 移动应用程序,有 5 页“login.html”“menu.html”“account.html”“settings.html”..etc
我用喜欢改变页面;
$.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>
虽然这个应用程序运行良好,但问题是我发现它非常脆弱,很难从意外错误中幸存下来。例如;
由于每个页面的正文 html 将如何加载在login.html中定义,这意味着如果任何时候用户手动刷新这些页面中的任何一个,页面将在不运行这些脚本的情况下加载,并加载一个没有正文的空页面。在那一刻,由于从内存中删除了正确的 DOM,用户被困在一个充满空白页面的应用程序中,唯一的方法是他足够聪明,可以在地址栏输入“login.html”,然后所有进程才能启动顺利。
我认为我们不能 %100 隐藏地址栏,向下滚动后它再次可见。
所以这是我想出的一个问题,可能会发生其他一些奇怪的事情,如果 DOM 以某种方式损坏,再次使用应用程序的唯一方法是输入 login.html 地址栏,用户可能不会对此感兴趣。
我怎样才能让这个应用程序更健壮,比如检测任何 DOM 损坏或刷新并将用户转发到 login.html,这样他就不会卡在一个有空页面的应用程序中。