问题 Cordova / PhoneGap仅支持单页移动应用程序


阅读完教程后,我仍然感到困惑。 我是否需要包含cordova.js并初始化app.initialize();在每个页面上?或者只要加载了index.html,我就不需要在任何其他页面上包含cordova.js并初始化它?


1960
2018-01-01 15:36


起源

你需要在每个页面上包含cordova.js ...... - Vicky Gonsalves
@VickyGonsalves并且我需要调用app.initialize();在每个页面上? - Franva
单页应用是“最佳实践”。是的,如果您移动到另一个页面,则必须重新加载所有内容,这就是使用单页的最佳做法。您可以通过单页应用获得更原生的感觉。 - Dawson Loudon
是的,不要使用多个页面。如果您使用多个页面,您可能无法通过AppStore获取应用程序 - pppontusw
那么如何使用后退按钮? - Captain Kenpachi


答案:


这取决于!如果您将Cordova与jQM或任何其他用户配合使用 AJAX样 框架,没有必要在每个页面上加载cordova.js。只需要在index.html中加载它即使你在另一个html中更改页面也会保持可用状态。

原因是在jQM中,事物以ajax方式加载,并且它们保留在DOM中,这就是为什么cordova库可以通过DOM生活获得。如果在每个页面上包含cordova.js,您将有多个声明,这可能会导致问题。请注意这一点。

我一直在使用单页应用程序在一个应用程序中工作,每个页面都在一个独立的HTML上,这对于我们的可持续性目的是有益的,它允许不同的人在其他页面上工作而不会仅仅在一个文件中弄乱。我们只是在index.html中加载cordova和其他常用库,一切正常。对于需要特殊代码的特定页面,我为每个页面加载了所需的脚本,因此当我改变页面时,库代码不会保留在DOM中,以保持DOM尽可能轻和干净。

如果您想在每个页面上包含cordova,请注意,如果尚未加载库,请先检查。我建议在所有页面中检查deviceready事件以保证安全。

单个或多个应用程序开发决策取决于您的需求和情况。


4
2018-01-02 17:33



嗨VicM,谢谢你的回答,这真的很有帮助。当你说:使用Cordova与jQM配合使用时,我不需要在每个页面上加载Cordova,因为它们留在DOM中......“所以,我的问题是:如何使用jQM将Cordova放入DOM中?你能给我一个完整的例子吗?谢谢 - Franva
只需将其包含在任何其他js库中,就像在索引页面内的任何网页上一样,这就是全部。使用HTML <script ....> </ script>标记。我不在我的电脑上,但如果你得到进一步的帮助,请告诉我。 - VicM
我仍然对底层机制感到困惑。如果我在Cordova中使用jQM,jQM如何在其DOM中存储函数,插件?跳转到另一个页面后,DOM在哪里?一个html页面有一个DOM,那么第二页如何知道第一页的DOM? - Franva
我强烈建议您阅读jQM文档(基础知识)以及基本的DOM文档来理解它。这是一个广泛的问题,但是你澄清了这个问题。恕我直言最适合你的是实际开始编写简单的东西并阅读文档,以便你完全理解正在发生的事情。 - VicM
一旦找到它们,我会尝试将您指向特定页面,同时值得一读DOM。 - VicM


在移动设备中,每次加载所有内容都是疯狂的,特别是如果没有wifi连接。

看看这个,是一个非常简单的方法来制作一个只有一个html的模块化应用程序: https://github.com/charnekin/api


3
2018-01-02 01:35



thx mate:)~~~~~ - Franva


是。您必须在每页上包含cordova.js。 如果您不需要在该页面上访问特定于设备的功能,则无需在每个页面上订阅Cordova相关事件,并且您可以使用包含JS和CSS组合的常规HTML页面。虽然这是可能的,但不建议在Cordova应用程序中执行此操作,因为每次导航到新页面时,用户都会注意到这一点。 Cordova的“最佳实践”是使用单页应用程序,不要在不同的屏幕上使用多个页面。

你可以看一下链接上的文章 http://floatlearning.com/2011/03/developing-better-phonegap-apps/ 在开始使用Cordova时需要考虑的另一组好建议


2
2018-01-01 19:58



非常感谢您的回答。在阅读了你的回复后,我想到了另一个问题:如果我们必须将所有“页面”保留在一个页面中,那么该html页面将变得越来越大,越来越难以维护。那么这个问题的解决方案是什么? - Franva
或者你知道任何html + javascript + css模块/布局/框架可以简化单页面应用程序的复杂性吗?就像你如何在一个单一的html页面中显示不同“页面”/视图的转换? - Franva
好的做法是使用AJAX为页面/视图加载打包的HTML,并将它们动态地注入到DOM中。这应该有助于浏览器重排。你可以使用jQuery Mobile(jquerymobile.com)如果你需要基本的用户界面。如果你需要大量的图形和动画,可能是Zepto(zeptojs.com)是替换jQuery非常好的选择。 - codevision
thx,我现在正在学习他们两个:) - Franva