Sencha + PhoneGap

时间:2011-01-19 05:34:03

标签: iphone ios cordova sencha-touch

我即将使用Sencha Touch + PhoneGap为iPhone开发应用程序,我有几个非常基本的问题:

1)我想读取位于http://abc.om/app/a3/位置的XML文件。我使用Sencha来读取这个xml,但它给了我以下错误:

  

XMLHttpRequest无法加载网址。原产地不被允许   访问控制允许来源。

这是使用Sencha读取XML的正确方法/方法吗?如果是,那我该如何解决上述问题呢?有人说Sencha是客户端,它无法读取域外的Xml - 这是真的吗?移动应用程序会发生什么?我应该在这里使用Phonegap吗?

2)当我为iPhone开发应用程序时,我该如何检查应用程序 - 使用Chrome?或者每次使用phonegap然后在iPhone上查看?

3 个答案:

答案 0 :(得分:35)

通常,PhoneGap应用程序在部署到移动设备后不会受到跨域安全限制的影响。原因各不相同,具体取决于您正在开发的平台,但对于iPhone,这是因为您使用file:/// URI将本地PhoneGap资产加载到iPhone上的浏览器中;这允许您绕过跨域安全限制。如果要创建托管在服务器上的常规网站,则 受此安全策略的限制。这是创建PhoneGap应用程序的好处之一。

  1. 我不是100%熟悉Sencha,但您可以使用基本XMLHttpRequest对象之上的任何框架在PhoneGap中进行跨域通信。无论是Sencha,jQuery,xui,MooTools等等。

  2. 为了测试PhoneGap应用程序,我通常使用桌面浏览器和一些额外工具的组合来帮助我。在您的情况下,如果您将计算机本地的PhoneGap应用程序加载到Safari之类的浏览器中(允许您从file:/// URI中删除XHR),您将看不到跨域问题。 Safari是少数允许您执行此操作的浏览器之一。或者,您可以在本地计算机上使用代理,让本地Web服务器发出网络请求并将其代理回应用程序。我倾向于使用一个名为sleight的强大工具,它是一个node.js Web服务器,如果服务器无法在您的计算机上本地找到所请求的资产,它将反向代理对目标外部域的请求。我会尝试为你设计一个使用魔法的例子:

    • 假设您的PhoneGap应用程序资产位于〜/ src / www下,应用程序位于index.html
    • 还假设您要从PhoneGap应用程序访问abc.com域
  3. 你会像这样使用:

    $ cd ~/src/www
    $ sleight target=abc.com
    

    现在您运行的本地Web服务器可以提供www目录下的所有内容。现在,您可以从index.html页面将XHR发送到http://abc.om/app/a3/,并且可以将这些内容代理给您。因此,您可以将浏览器指向http://localhost:8088/index.html,然后您将获得PhoneGap应用的index.html。

    Sleight是PhoneGap开发的绝佳工具,因为它允许您在计算机上本地测试您的PhoneGap应用程序。

答案 1 :(得分:6)

关于问题#2: 您可以使用“chrome --disable-web-security”来绕过相同的域限制并运行您的phonegap应用程序。

编辑:与Chrome版本48一样,您还应添加标记“--user-data-dir”。见this question.

答案 2 :(得分:0)

关于问题#2,Ronenz的回答有效。

您还可以找到Chrome的几个扩展程序 例如,我正在使用这个,易于启用和禁用:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi