煎茶+PhoneGap
Posted
技术标签:
【中文标题】煎茶+PhoneGap【英文标题】:Sencha + PhoneGap 【发布时间】:2011-06-11 13:12:04 【问题描述】:我即将使用 Sencha Touch + PhoneGap 为 iPhone 开发一个应用程序,我有几个非常基本的问题:
1)我想读取位于http://abc.om/app/a3/ 的XML 文件。我使用 Sencha 来读取这个 xml,但它给了我以下错误:
XMLHttpRequest 无法加载 url。原产地不允许 访问控制允许来源。
这是使用 Sencha 读取 XML 的正确方法/方法吗?如果是,那么我该如何解决上述问题?有人说 Sencha 是客户端,它无法读取域外的 Xml - 这是真的吗?移动应用程序会发生什么?我应该在这里使用 Phonegap 吗?
2)当我正在为 iPhone 开发应用程序时,我应该如何检查应用程序 - 使用铬?还是每次都使用 phonegap 然后在 iPhone 上检查?
【问题讨论】:
亲爱的user580950
,如果有帮助,请注意接受答案。
【参考方案1】:
一般来说,PhoneGap 应用程序一旦部署到移动设备上就不会受到跨域安全限制。其原因因您开发的平台而异,但对于 iPhone,这是因为您的本地 PhoneGap 资产使用file:///
URI 加载到 iPhone 上的浏览器中;这使您可以绕过跨域安全限制。如果您正在创建一个托管在服务器上的常规网站,那么您会受到此安全策略的限制。这是创建 PhoneGap 应用程序的好处之一。
我对 Sencha 不是 100% 熟悉,但您可以使用基本 XMLHttpRequest 对象之上的任何框架在 PhoneGap 中进行跨域通信。无论是 Sencha、jQuery、xui、MooTools 等
为了测试 PhoneGap 应用程序,我通常结合使用我的桌面浏览器和一些额外的工具来帮助我。在您的情况下,如果您将计算机上的 PhoneGap 应用程序本地加载到 Safari 之类的浏览器中(它允许您从 file:///
URI 中创建 XHR),您将不会看到跨域问题。 Safari 是少数允许您执行此操作的浏览器之一。或者,您可以在本地计算机上使用代理,让本地 Web 服务器发出网络请求并将它们代理回您的应用程序。我倾向于使用一个很棒的工具sleight,这是一个node.js Web 服务器,如果服务器在您的计算机上本地找不到请求的资产,它将反向代理请求到目标外部域。我将尝试为您展示一个使用技巧的示例:
你会像这样使用诡计:
$ 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 应用程序。
【讨论】:
很好的回答你摇滚!!! :) 我能够解决它.. 非常感谢您的帮助 我想给你的答案+2,但是***不允许我:)【参考方案2】:关于问题 #2: 您可以使用“chrome --disable-web-security”绕过同域限制并运行您的 phonegap 应用程序。
编辑:与 Chrome 版本 48 一样,您还应该添加标志“--user-data-dir”。见this question.
【讨论】:
【参考方案3】:关于问题 #2,Ronenz 的回答有效。
您还可以找到几个 Chrome 扩展程序。 比如我用的是这个,方便启用和禁用:https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi
【讨论】:
以上是关于煎茶+PhoneGap的主要内容,如果未能解决你的问题,请参考以下文章