Firefox设置启用跨域Ajax请求

Pab*_*ote 47 javascript http xmlhttprequest

我需要暂时允许跨域XMLHttpRequest.改变firefox安全设置似乎是要走的路.但我已经试过这个这个,但他们没有工作.有没有人能够配置这个?谢谢.

tsd*_*sds 28

如果您不想在开发和测试应用程序期间浪费时间在跨域问题上,可以使用插件强制CORS for FF.

更新:似乎这个插件不再存在.但还有另一种选择 - 这个Chrome扩展程序

  • Forcecors很棒.值得一提的是,安装后你必须点击view => toolbars => add-on bar.然后cors按钮将在右下角显示,以启用它.我解压缩了xpi并看到按下按钮时有一个切换功能,但从未看到按钮. (9认同)
  • 似乎FF删除了它. (7认同)
  • "值得一提的是,安装后你必须点击view => toolbars => add-on bar." 先生,你是个圣徒 (5认同)

Wal*_*ung 21

对于现代浏览器,您可以尝试以下方法:

https://developer.mozilla.org/en/HTTP_access_control

总之,你需要添加以下到SERVER响应报头(以下允许访问 foo.example):

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000
Run Code Online (Sandbox Code Playgroud)

请注意,X-PINGOTHER它是由JavaScript插入的自定义标头,并且应该因站点而异.

如果您希望任何站点在Ajax中访问您的服务器,请*改用.


编辑:

当我在2009年第一次回答问题时,我实际上遇到了同样的问题,我使用服务器端配置解决了这个问题.

那时FF或Chrome上没有插件.

但是,现在我们确实有使用浏览器端插件的替代方案,请检查答案 tsds

  • -1它没有回答这个问题.OP要求浏览器端配置 (11认同)
  • 如果我理解正确,如果您无法更改服务器,则无法解决原始问题 (4认同)

tva*_*son 9

你尝试过使用jQuery的ajax请求吗?从版本1.3开始,jQuery支持某些类型的跨域ajax请求.

引用上面的参考:

注意:当'script'或'jsonp'是dataType时,所有远程(不在同一域)请求都应指定为GET(因为它使用DOM脚本标记加载脚本).需要XMLHttpRequest对象的Ajax选项不适用于这些请求.完成时调用complete和success函数,但不接收XHR对象; 不调用beforeSend和dataFilter函数.

从jQuery 1.2开始,如果指定了JSONP回调,则可以加载位于另一个域的JSON数据,这可以这样做:"myurl?callback =?".jQuery自动替换?使用正确的方法名称来调用,调用指定的回调.或者,如果将dataType设置为"jsonp",则回调将自动添加到您的Ajax请求中.

  • 为什么选择downvote?使用框架的跨域功能是对此问题的合理回答.问题中没有提到需要HTML的事实,只是在对我的回复的评论中. (2认同)

Mic*_*ael 7

这就是事情,没有办法"暂时"禁用跨域XMLHttpRequest,如果你可以暂时禁用它,那么它可以永久禁用.这是现代AJAX编程中一个相当普遍的问题,并且通常使用称为跨域脚本的技术来解决.

这里的想法是,如果你调出一个跨域脚本,它会返回JavaScript(JSON)结果,然后传递给你的一个函数.

下面是一些示例代码,用于说明从JavaScript代码角度看它的外观:

  function request_some_data() {
    var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc";

      try {
        try{
          document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>");
        } 
        catch(e){
          var x = document.createElement("script");
          x.src = s;
          document.getElementsByTagName("head")[0].appendChild(x);
        }
      }
      catch (e) {
        alert(e.message);
      }
   }
Run Code Online (Sandbox Code Playgroud)

然后,您将在代码中定义一个接收数据的函数,并在服务器中"处理"回调案例,这里是客户端JavaScript:

function myfunc(data) {
  alert(data);
}
Run Code Online (Sandbox Code Playgroud)

在服务器端,这里我给出了一个PHP示例,但这可以在Java中轻松完成,也可以在服务器端技术中实现:

<?php
   if($_GET["callback"]) {
     print($_GET["callback"] . "(");
   }
   /* place your JSON object code/logic here */
   if($_GET["callback"]) {
     print(");");
   }
 ?>
Run Code Online (Sandbox Code Playgroud)

请注意,您在服务器端生成的内容最终会成为在客户端执行的一些JavaScript.

  • `"<scr"+"ipt"`这看起来很恶毒 (16认同)
  • 当然你可以暂时禁用它.例如,使用--disable-web-security启动Chrome. (4认同)