原生iOS网络应用程序+jquery手机.正在保存应用程序的当前状态



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

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

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

我希望这样,当我回到网络应用程序时,我会留在

CCD_ 2。

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

page1.html?param1=x.

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

您可以使用localStorage来保存状态,但我认为这不会停止您所描述的自动卸载行为。苹果网站上有一个Tic-Tac-Toe游戏的例子:

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

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

粗略的例子:在jQuery加载后,您可能会在代码中放入这样的内容:

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

现在,每次单击链接,该值都会保存到localStorage中。

然后在相关页面的顶部,你可以放这样的东西:

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

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

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

如果你想要一个真正颠覆重新加载行为的解决方案,我认为你必须探索使用HTML5离线应用程序缓存,苹果在这里有文档:

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

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

希望能有所帮助!

最新更新