我有一个我认为是现有网络应用程序的相当标准的设置,并且想就如何最好地调整它以通过 PhoneGap 创建本机版本的建议,以一种我们可以继续开发网络应用程序和更新的方式phonegap 从中生成版本,返工最少。
我是PhoneGap 新手。我四处搜索并尝试了 StackOverflow 等的各种建议,但没有运气,至少对于我的设置而言。
该应用程序是在 GWT 中开发的,包括:
所有应用程序的共享文件夹中的静态资源
/static/ 带有图像、字体、css。css 定义了一些字体系列,在 /fonts 中引用字体文件
我们使用绝对路径从 html 文件和 JavaScript 代码中引用这些静态资源。
多个子文件夹中的静态资源(由 GWT 模块仅供参考)
例如 /LoginGadget,它将有 GWT 生成的 html、Javascript 以及有时带有 css 和 css-images 的子文件夹。
GWT-RPC
这些基本上是 GWT 负责序列化等的 servlet,并且可以通过 XHR 从我们的客户端代码访问。
PhoneGap 构建
我已经开始考虑使用 PhoneGap 创建一个打包的应用程序,并遇到了一些我需要建议的问题(Android 示例)。
我已经创建了 /assets/www 并在其中放置了一个 index.html 文件并开始运行。我复制了我们的 /static/ 文件夹和 /LoginGadget 文件夹的版本在那个“根”下查看,并使用
super.loadUrl("file:///android_asset/www/index.html");
哪个有效。
在我们所有 GWT 生成的 html 和 Javascript 文件中,我们使用绝对路径(例如“/static/....”)和相对路径(例如,来自 LoginGadget Javascript,它可能引用“css/some.css”)来引用静态资源)。
相对路径有效,因为它们位于引用它们的 html/js 所在的文件夹“下”。
问题 1
然而,对绝对路径的引用失败,尽管 PhoneGap 开头说:
DroidGap: url=file:///android_asset/www/index.html baseUrl=file:///android_asset/www/
我希望将 index.html 中对“/static/images/file.png”的引用附加到“baseUrl”以提供 file:///android_asset/www/static/images/file.png 并因此工作,因为那是文件所在的位置。
我不得不修改 index.html 以使用“static/image/file.png”让它工作。但是我必须使用不同的配置重新编译我们所有的 GWT 应用程序以修改对资源的所有引用,并且如果修改为只是“静态/”,则子文件夹中其他文件的引用返回“/static/”将不起作用”。
如何获得对“映射”到 /assets/www 或类似文件的绝对路径引用?(见下文,我已经研究过使用“base”标签......)
问题 2
GWT RPC 向提供 html/js 的服务器发出 XHR 请求。这很好用,因为该应用程序没有硬编码主机服务器名称,实际上部署在许多不同的应用程序引擎应用程序 ID/域上进行测试等。
这里的 html/js 文件是从 file:/// “提供”的,因此我需要以某种方式指定服务器。
我尝试使用文档中的“base”标记进行指定,但是我在 html/js 中对未指定“file://”的资源的任何引用似乎都是对“base”中指定的服务器进行的。 ....因此我不再加载我的本地资源,我基本上有一个从我的服务器提供的网络应用程序。
想
我想做的是能够从我的 wab-app 的战争(/static 和我所有的 /GWT-Module 文件夹)中获取(相当大的)编译和测试的应用程序,并将它们复制到 /assets/www在我的 PhoneGap 应用程序上,然后添加一些样板或启动代码并按原样运行。
听起来像是一个很大的要求,但我想如果我能正确指定两件事:
文件路径用作未指定 http/https 协议(或其他协议......我已经看到在 DroidGap.java 中处理)的资源请求的绝对路径的“根”
用于任何 XHR 请求的服务器(协议、主机名、端口)
然后一切都会洗出来!
我认为这将是一个失败的“标准”设置,并且已经涵盖。也许是这样,我只是错过了一些东西。
评论?建议?
提前感谢您的帮助。