【问题标题】:How to force Chrome/Firefox/Opera to do crossdomain requests from localhost?如何强制 Chrome/Firefox/Opera 从 localhost 执行跨域请求?
【发布时间】:2011-05-25 02:52:20
【问题描述】:

喂,

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

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

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

编辑

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

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

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

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

我对浏览器命令行选项很感兴趣,我什至会考虑为浏览器打补丁(我是用户,不想将其分发给其他任何人)。

谢谢,

【问题讨论】:

  • 不是一个真正的答案,但这篇来自 Google 的幕后文章讨论了由于浏览器对同源请求的限制,他们如何使用 JSONP:googlecode.blogspot.com/2010/11/…
  • 是的,但这对我来说太局限了。我得到了一些在 iFrame 中加载网站的代码,我正在尝试从 Javascript 操作其内容:即只是我之前使用 Python 机械化完成的任务的自动化。

标签: javascript firefox google-chrome cross-domain


【解决方案1】:

我不确定您是否可以控制 IFrame 中的内容,但既然您说的是本地文件,我猜您可以。 Ajaxian 上的This article 应该涵盖您的用例。 由于您的目标是 A 级浏览器(即不是 IE),您可以使用 html5 window.postMessage 而不是 IFrame。

干杯,乔恩。

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

【讨论】:

    【解决方案2】:

    你为什么不启动一个简单的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 或第一个参数,并通过此脚本处理文件夹中的所有文件。

    【讨论】:

    • 虽然对这个问题没有帮助。
    • 也许我有点误解了这个问题。等我有空的时候再看看这个!
    【解决方案3】:

    我不确定当页面位于本地主机上时这是否有效,但可能值得一试:http://www.asual.com/jquery/address/

    那个 jQuery 插件可以让你从任何域发出跨域请求...也许它可以与 localhost 一起工作?不过还没有测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-13
      • 2014-10-30
      • 2011-01-25
      • 1970-01-01
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      相关资源
      最近更新 更多