我正在编写一个HTML5应用程序,它使用JSONP从几个不同的来源收集数据。我正在使用GET做的任何事情都能很好地完成。我现在正试图发布数据,我遇到了一个有趣的障碍。我需要将数据从我的应用程序POST到另一个应用程序从本地计算机运行。我正在尝试编写一个支持跨平台的移动应用程序(想想Pulse / Flipboard),因此代码将始终从本地源运行。我的思考过程如下:
file://
的本地源,因此原始标头为空。这会导致请求失败(XmlHttpRequest error: Origin null is not allowed by Access-Control-Allow-Origin)我所定位的所有浏览器都是基于webkit的(iPad,Playbook,Android),所以我想知道在相同的原始政策代码中是否有任何嘎嘎声,我可以偷偷摸摸通过?也许是使用iframe或postMessage的东西?
答案 0 :(得分:9)
事实证明,最简单的方法是发布到iframe内的目标网址。大多数浏览器上的同源策略允许您从一个域到另一个不相关的域执行HTTP POST。我通过向我的页面添加iframe解决了这个问题,最初设置为本地引导页面。由于该页面是从同一个域加载的,因此我可以通过脚本控制它。我用它将表单发布到我的目标站点,并轮询结果以确定我的呼叫是否成功。它不优雅,但它有效。
答案 1 :(得分:1)
这个Javascript库几乎可以肯定地帮助你:
easyXDM是一个Javascript库 使您能够轻松地成为开发人员 解决限制中的问题 同源政策所在地 转向使其易于沟通和 在域中公开JavaScript API 边界。
...
核心easyXDM提供了一个 能够通过的运输堆栈 基于字符串的消息 窗户,消费者(主要的 文件)和提供者(文件 包括使用iframe)。确实如此 这是通过使用几个可用之一 技术,总是选择最多 对当前浏览器有效。 对于所有实现传输 堆栈提供双向性, 可靠性,排队和 发送者验证。