1

我正在使用 jquery 移动单页模板。导航如下:

index.html -> page1.html?param1=x -> page2.html?param1=x&param2=y

在 page2.html 上有一个指向在 Mobile Safari 中打开的 PDF 文件的链接。返回到正在运行的 Web 应用程序后,它会重新加载并启动,index.html. 这只是从主屏幕运行 Web 应用程序时出现的问题。

我希望这样当我返回 Web 应用程序时,我会留在

page2.html?param1=x&param2=y.

我也希望这样当我点击该页面上的后退按钮时返回

page1.html?param1=x.

我相信我必须使用它localStorage来保存应用程序的状态,但我不确定需要保存哪些信息来维护我的页面历史记录。

4

1 回答 1

1

您可以使用localStorage来保存状态,但我认为这不会停止您描述的自动重新加载行为。Apple 网站上有一个井字游戏示例:

https://developer.apple.com/library/safari/documentation/iPhone/Conceptual/SafariJSDatabaseGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007256-CH1-SW1

我不完全熟悉 jQuery Mobile 以及单页模板的工作原理,但是如果您可以通过保存当前 URL(例如 page2.html?param1=x¶m2=y),localStorage那么您需要添加一些代码到您的页面会查找此存储值并在存在时重定向。

粗略的例子:你可能会在你的代码中加入这样的东西,在 jQuery 加载之后:

$('a').on('click', function(){          
    localStorage.currentURL = this.href
});

现在,每次您单击链接时,该值都会保存到localStorage.

然后在相关页面的顶部,您可以放置​​如下内容:

if (localStorage.currentURL && location.currentURL != location.href) {
    location.href = localStorage.currentURL;
}

此部分查找保存到的值localStorage,如果找到,则将页面重定向到正确的 URL。它还确保保存的值不是您已经在的页面,否则我们最终会陷入无限循环。

从技术上讲,重新加载行为仍然存在,但您的应用程序可以根据您上次所在的位置进行自我重定向。这就是为什么您可能希望将其直接放在开始<body>标记之后和任何其他脚本加载之前 - 以便它快速加载和重定向。

如果您想要一个真正颠覆重新加载行为的解决方案,我认为您必须探索使用 Apple 在此处提供文档的 HTML5 离线应用程序缓存:

https://developer.apple.com/library/safari/documentation/iphone/conceptual/safarijsdatabaseguide/OfflineApplicationCache/OfflineApplicationCache.html

实际上,我认为从技术上讲,这里的重新加载行为仍然存在,但是因为所有资产都在本地缓存,所以它足够快,您可能不会注意到。

希望有帮助!

于 2013-10-04T05:53:02.583 回答