如何强制Chrome / Firefox / Opera从localhost执行跨域请求?

时间:2010-12-14 07:15:33

标签: javascript firefox google-chrome cross-domain

HY,

所以我遇到了这个问题:我正在尝试在我的localhost上开发一个HTML文件,而我安装的所有浏览器都阻止我发送跨域请求。

我要做的是将我用Python编写的脚本(使用Mechanize,pyquery和lxml)转换为Javascript,原因并不重要(我认为在Javascript中更容易模拟一些东西)

来自本地文件的跨域请求曾经工作过,并且仍在使用最新的Safari(稳定版),但是我无法在这台机器上安装Safari(它是一个Linux机器)。

修改

我发现了Firefox的升级权限,例如:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
// among others

问题是,我也试图访问iFrame中加载的内容...正如我所说,我正在尝试模拟浏览器会话,就像我使用像Mechanize这样的库,但是来自Javascript。我的脚本仍可在Safari中使用。

那么如何强制Chrome / Firefox / Opera绕过本地存储文件的所有安全限制?

我对浏览器命令行选项感兴趣,我甚至会考虑浏览器的补丁(我是用户,而不是尝试将其分发给其他人)。

谢谢,

3 个答案:

答案 0 :(得分:0)

我不确定您是否可以控制IFrame中的内容,但是因为您说的是本地文件,我想您会这样做。关于Ajaxian的This article应该涵盖您的用例。 由于您的目标是A级浏览器(e.i.而不是IE),您可以使用html5 window.postMessage而不是IFrame。

干杯,乔恩。

我没有Python Mechanize lib的工作知识。

答案 1 :(得分:0)

为什么不开始使用简单的http服务器来解决问题?

import sys
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler


HandlerClass = SimpleHTTPRequestHandler
ServerClass  = BaseHTTPServer.HTTPServer
Protocol     = "HTTP/1.0"

if sys.argv[1:]:
    port = int(sys.argv[1])
else:
    port = 8000
server_address = ('127.0.0.1', port)

HandlerClass.protocol_version = Protocol
httpd = ServerClass(server_address, HandlerClass)

sa = httpd.socket.getsockname()
print "Serving HTTP on", sa[0], "port", sa[1], "..."
httpd.serve_forever()

这个python代码将启动一个简单的http服务器,侦听端口8000或第一个参数,并处理该脚本中文件夹中的所有文件。

答案 2 :(得分:0)

当页面在localhost上时,我不确定这是否有效,但值得一试:http://www.asual.com/jquery/address/

该jQuery插件允许您从任何域发出跨域请求...也许它可以与localhost一起使用?虽然没有测试过。