【问题标题】:path problems porting web-app to phonegap将 web 应用程序移植到 phonegap 的路径问题
【发布时间】:2013-05-20 17:15:57
【问题描述】:

我有一个我认为是现有网络应用程序的相当标准的设置,并希望获得有关如何最好地调整它以通过 PhoneGap 创建本地版本的建议,以一种我们可以继续开发网络应用程序的方式并以最少的返工更新 phonegap 生成的版本。

我是 PhoneGap 新手。我四处搜索并尝试了 StackOverflow 等的各种建议,但没有运气,至少对于我的设置而言。

该应用是在 GWT 中开发的,包括:

所有应用的共享文件夹中的静态资源

/static/ 带有图像、字体、css。 css 定义了一些字体系列,引用 /fonts 中的字体文件

我们使用绝对值从 html 文件和 JavaScript 代码中引用这些静态资源 路径。

多个子文件夹中的静态资源(由 GWT 模块仅供参考)

例如 /LoginGadget,它将有 GWT 生成的 html、Javascript 以及有时带有 css 和 css-images 的子文件夹。

GWT-RPC

这些基本上是 servlet,其中 GWT 负责序列化等,并且可以通过 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 应用程序的战争(/static 和我所有的 /GWT-Module 文件夹)中获取(相当大的)编译和测试的应用程序,并将它们复制到 / assets/www 在我的 PhoneGap 应用程序上,然后添加一些样板或启动代码并按原样运行。

听起来是一个很大的要求,但我想如果我能正确指定两件事:

  • 用作“根”的文件路径,用于未指定 http/https 协议(或其他协议......我已经看到在 DroidGap.java 中处理)的资源请求的绝对路径

  • 用于任何 XHR 请求的服务器(协议、主机名、端口)

然后一切都会洗出来!

我认为这将是一个失败的“标准”设置,并且已经涵盖。也许是这样,我只是错过了一些东西。

评论?建议?

提前感谢您的帮助。

【问题讨论】:

  • 注意海关字体。并非所有浏览器都支持它。例如。 WP7 没有。
  • 我经常做这种类型的开发。不知道为什么你会使用绝对路径。仅使用相对路径,因为 phonegap 的目的是为多个设备构建。

标签: android gwt cordova


【解决方案1】:

你知道mgwt吗? http://www.m-gwt.com

它是由 GWT 指导委员会成员之一为 GWT 构建的移动框架,它还为 GWT 应用程序提供 phonegap 集成。

项目中有很多文档和一个非常友好的用户群。

让我更详细地解决您的问题:

问题1:

如果您使用绝对路径,您将得到与 phonegap 不一致的行为,因为浏览器在本地构建这些 url,并且对 / 的引用表示手机上的根条目。 大多数时候使用绝对 URL 是一个坏主意,我建议您在应用中更改它(就像您已经做过的那样)。

问题2:

要将 GWT RPC 与 phonegap 一起使用,请阅读我为解决这些问题而撰写的这篇博文:http://blog.daniel-kurka.de/2012/04/gwt-rpc-with-phonegap-revisited.html

【讨论】:

  • 我快速浏览了 mgwt/gwt-phonegap。如果我能在 phonegap 中工作,我们很可能会通过 GWT 将更多的 Web 应用程序开发转移到使用它们。但是,我认为他们编译的 JS 输出与我现有的 GWT 编译的 JS 输出相似......所以我认为我仍然会遇到我在问题中描述的相同问题?
  • 嗨,丹尼尔,谢谢。我已经走上了使用 SetServiceEndPoint 的道路.....但跳过了为 GWT.create() 创建新生成器的工作,但采用了类似的方法。我已经修改了我的构建以重新映射路径的绝对 URL,并且适用于 Android,但对于 iOS,绝对路径似乎无法在编译时确定,因为它在路径中间有一个设备 ID! :-(
【解决方案2】:

我们通过两个单独的操作解决了这些问题:

1) 我编写了一个 ant 目标,作为我们构建的一部分,它采用 web 应用程序,并替换它找到的所有内部 url 引用中的路径,使它们适合它们在应用程序中工作所需的内容。对我来说,这仍然是 phonegap 中的一个主要错误。也许它已在较新的版本中得到修复?

2) 我们对 RPC 服务类进行了子类化,并将其修改为具有一个静态成员,即服务端点。在我们的 phonegap 应用程序启动时,我们将端点修改为指向所需的服务器并 presto....我们所有的 GWT RPC 都指向正确的位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多