在 Mobile Safari 中禁用同源策略

Posted

技术标签:

【中文标题】在 Mobile Safari 中禁用同源策略【英文标题】:Disable Same Origin Policy in Mobile Safari 【发布时间】:2012-08-22 10:24:00 【问题描述】:

我有一个 html5/javascript 应用程序,最初是为在某些汽车上运行而编写的。基本上,我需要将我的应用设置为在浏览器中运行,以便向客户展示一个简单的演示。

我正在使用 jQuery .ajax,由于同源策略而导致问题。我找到了很多在桌面浏览器中禁用此功能的方法,但在移动浏览器中却没有。

我的目标是在 iPad 上的 Mobile Safari 中演示该应用程序。有什么方法可以暂时禁用 iPad 上的同源策略?

【问题讨论】:

+1,我也很想回答这个问题。 您是否尝试在服务器上设置标头 Access-Control-Allow-Origin: *? 不幸的是,我无法控制要进行 AJAX 调用的服务器。我的短期解决方案是在托管 html/js 的同一台服务器上托管 php 代理脚本。幸运的是,我需要的服务最终将 CORS 标头添加到它们的响应中,这使我能够取消我的代理脚本。 目前(今天)没有其他合适的解决方案,而不是设置标题“Access-Control-Allow-Origin: *”。您的客户端解决方案不会让您满意。另一种方法是使用 JSONP(=改变你的通信方式)。所有这些解决方案都已发布。 【参考方案1】:

我在使用煎茶应用时遇到了同样的问题。我通过设置我的 javascript ajax 调用的基本路径来解决,例如:

var BASEPATH = 'http://192.168.1.200/myapp';

$.ajax(
  url: BASEPATH+'/someaction'
);

我在手机上使用http://192.168.1.200/myapp访问它

我的问题是我只能通过 IP 访问移动设备,但 ajax 调用指向 localhost。

希望这个技巧有所帮助。

【讨论】:

【参考方案2】:

您需要运行 Web 服务器,而不是文件协议。

【讨论】:

它必须在网络服务器上运行才能从 iPad 访问。问题是我无法控制我调用的服务,它们的响应中不包含 CORS 标头。我想出的解决方案是在与我的 html/js 相同的服务器上托管一个 php 代理脚本。【参考方案3】:

基本上,你需要一个标题。

将此代码放在您要向其发送跨域请求的页面顶部。

<?php header("Access-Control-Allow-Origin: *"); ?>

小心使用 *,因为这允许任何网站向发送该标头的页面发送请求。

* 可以替换为域,例如 example.com、example.net。

【讨论】:

【参考方案4】:

尝试在您的 ajax 调用中使用 JSONP。它将绕过同源策略。

http://learn.jquery.com/ajax/working-with-jsonp/

【讨论】:

【参考方案5】:

如果您对公共代理使用 ajax 调用,它基本上可以删除相同的源头标头,那么在 Javascript 中是可能的。或者您可以编写一个 php curl 获取页面,在其中调用使用 ajax。有关这方面的代码,请查看此博文:

http://thewebtimes.tumblr.com/post/90549614884/access-forbidden-webpages-with-javascript

【讨论】:

以上是关于在 Mobile Safari 中禁用同源策略的主要内容,如果未能解决你的问题,请参考以下文章

在 TWebbrowser 中禁用同源策略

在 Android Chrome 上禁用同源策略

在 Chrome 中禁用同源策略

禁用 Firefox 同源策略

如何在 Chrome 扩展程序中禁用同源策略?

禁用同源策略/在 WebKit WebViews 中创建跨域 XMLHttpRequests?