Cordova(PhoneGap)重新初始化jQuery Mobile应用程序的每一页

我一直在使用Cordova和jQuery Mobile编写一个简单的四屏Android应用程序。 不同的屏幕在HTML的单页内排列为具有data-role =“page”属性的DIV。 我基本上从jQuery Mobile文档中复制了多页样本模板。

http://jquerymobile.com/test/docs/pages/page-anatomy.html

页面之间的导航通过粘贴在每页底部的持久导航栏进行。 同样,我使用了jQuery Mobile文档中建议的代码,几乎没有修改。

 

各种Javascript库包含在HTML页面的head部分中,如下所示(application.js包含应用程序的逻辑)。

  Redacted            

当Cordova完成加载并准备使用时,它会发出“deviceready”信号。 Cordova文档建议将所有设置代码绑定到与该信号关联的事件监听器。 我在application.js中这样做了:

 function onDeviceReady() { console.debug("Cordova initialized."); setup(); } document.addEventListener("deviceready", onDeviceReady); 

setup()是一个从浏览器Web SQL数据库和存储(使用此处定义的Cordova API)读取信息的function,以便在应用程序启动之间维护用户首选项和使用信息。

现在出现问题:我的印象是jQuery Mobile将使用jQuery ajax方法在第一页之后加载任何后续页面,并且这样做会剥离head部分并直接跳转到带有数据的DIV -role =“page”属性和相应的ID。 我所观察的是,每当我访问应用程序的新页面时,头部分中的脚本似乎都会重新加载。 这是在第一次在会话中访问页面然后停止发生时发生的。

似乎Cordova正在重新初始化,并且它再次发出设备准备信号。 在Eclipse中使用LogCat,我可以看到我在onDeviceReady函数中放置的调试消息。 setup()函数也被再次调用。 这会大大减慢速度。

有谁知道我哪里出错了? 有没有办法确保Cordova只加载一次?

谢谢,埃文

我使用phonegap facebook连接插件遇到了同样的问题。 唯一的解决方法是将整个应用程序设计为一个html文档,其中的面板显示并隐藏为不同的屏幕。 如果要将面板保存在单独的文件中,可以使用require.js之类的内容

我知道这个问题大约有9个月了,但万一我的解决方案可以帮助其他人解决同样的问题

不要使用每个HTML显示来构建页面,而是构建一个长HTML页面,每个显示部分都在其自己的DIV中,其中data-role="page"

现在,当您更改页面时,可以使用JQM调用$.mobile.changePage()来更改显示页面

例如,您的页面可能如下所示:

 

Page Link

more content here

我知道这对于大多数Web开发来说似乎都是违反直觉的,但使用PhoneGap和JQM意味着不能在标准Web开发中工作