0

在构建我的应用程序时,我使用 JQueryMobile 创建了它。我得到了一切工作,包括使用

 jquery($document).on('pageinit','#someID',function(){ ...});

过渡效果很好......在所有浏览器中移动到新页面都很好。

然后我使用 PhoneGap 2.9.0 进行设置。我添加了cordova.js的包含。初始化应用程序并添加 var app = ; 到我的 main.js 文件。在 var app 中调用的函数基本上是一个虚拟函数,包装了我所有的 pageinit 调用。我不能让它工作了,基于 window.console.log 条目我知道没有发生 pageinit 调用。

我的问题是一个绝望的问题,因为我在这个问题上为客户浪费了太多时间。我应该怎么做才能让我的页面被触发?我确定这是问题的症结所在。

这是一个 jsfiddle - http://jsfiddle.net/3Nz9t/。它不会渲染任何东西。但它会让你了解我上面描述的内容

4

4 回答 4

1

您应该绑定到 DeviceReady 而不是 pageinit。

于 2013-08-14T18:09:51.217 回答
0

听起来您正试图在普通浏览器中使用 PhoneGap 运行您的应用程序。IIRC,PhoneGap 预计不会在普通浏览器中工作。该deviceready事件不会在普通浏览器中触发。要使 PhoneGap 正常工作,您必须使用入门指南中描述的方法之一构建 Android/iOS/... 应用程序。

但是,如果您想在普通浏览器中测试您的应用程序,可以使用phonegap-desktop,它带来了一个cordova.js模拟PhoneGap API 的 shim。

于 2013-08-14T18:14:41.743 回答
0

尝试像文档示例一样在正文加载后添加 deviceready:http: //docs.phonegap.com/en/edge/cordova_events_events.md.html#deviceready

添加了 onBodyLoad 方法的修改小提琴:http: //jsfiddle.net/3Nz9t/2/

记得添加:

<body onload="onBodyLoad()">
于 2013-08-14T18:32:58.473 回答
0

感谢所有分享和帮助我的人。最后,我做了一些研究和一些令人痛苦的缓慢调试,并得出了下面的解决方案。

万一有人遇到这个,想知道我是如何解决这个问题的。

保持所有 JQueryMobile pageinit 调用不变。让它们像在网站中一样加载。抵制将它们放入 app.initialize() 函数的冲动。当在 pageinit 中,您有一个依赖于插件的函数时,问题就出现了,该插件必须在 app.initialize() 期间联机。PhoneGap 的所有插件都需要在该阶段上线。

为了解决这个问题,我在我的 main.js 文件和我的之前添加了位于 jsFiddle 中的代码:http <script type="text/javascript">app.initialize();</script>: //jsfiddle.net/BtzJJ/

*注意,小提琴不会渲染,它只是为了演示我的代码。

需要注意的重要部分是我创建了一个 var 并将其设置为 false。然后在我的 pageinit 中查看这个 var。由于 var = 0,我的初始化部分取决于我的插件被跳过。这使我的页面能够使用 JQueryMobile 正确加载。

现在,在 HTML 中,我们看到我已经定义了 var app 和我的 onDeviceReady 函数。在我的函数中,我包含了我的插件 js 文件。在包含该文件的过程中,我运行了一个函数,该函数从被跳过的 pageinit 调用代码

我希望这有助于节省一些时间。

于 2013-08-22T13:50:07.367 回答