14

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

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

XMLHttpRequest 无法加载 url。Access-Control-Allow-Origin 不允许 Origin。

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

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

4

3 回答 3

36

一般来说,PhoneGap 应用程序一旦部署到移动设备上就不会受到跨域安全限制。其原因因您开发的平台而异,但对于 iPhone,这是因为您的本地 PhoneGap 资产是使用file:///URI 加载到 iPhone 上的浏览​​器中的;这使您可以绕过跨域安全限制。如果您正在创建一个托管在服务器上的常规网站,那么您受到此安全策略的限制。这是创建 PhoneGap 应用程序的好处之一。

  1. 我对 Sencha 不是 100% 熟悉,但您可以使用基本 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 域

你会像这样使用诡计:

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

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

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

于 2011-01-19T19:35:59.630 回答
5

Regarding question #2: You can use "chrome --disable-web-security" to bypass the same-domain restriction and run your phonegap application.

Edit: As as Chrome version 48, you should also add the flag "--user-data-dir". See this question.

于 2011-10-09T16:35:24.133 回答
0

Regarding question #2, Ronenz's answer works.

Also you can find several extensions of Chrome.
For example, I am using this one, easy to enable and disable:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi

于 2015-07-14T05:55:30.817 回答