Firefox 设置启用跨域 Ajax 请求

IT技术 javascript http xmlhttprequest
2021-02-16 14:05:27

我需要暂时允许跨域 XMLHttpRequest。更改 Firefox 安全设置似乎是要走的路。但我已经尝试过这个这个,但他们没有用。有没有人以前能够配置这个?谢谢。

6个回答

如果您只是不想在应用程序的开发和测试期间将时间浪费在跨域问题上,您可以使用插件Force CORS for FF。

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

Forcecors 很棒。值得一提的是,安装后您必须单击查看 => 工具栏 => 附加栏。然后 cors 按钮将显示在右下角,单击以启用它。我解压缩了 xpi,看到按下按钮时有一个切换功能,但从未看到该按钮。
2021-04-19 14:05:27
看来FF已经删除了它。
2021-05-03 14:05:27
“值得一提的是,安装后你必须点击查看 => 工具栏 => 附加栏。” 先生,您是圣人
2021-05-14 14:05:27

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

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

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

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


编辑:

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

那时 FF 或 Chrome 上还没有插件。

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

请注意,Access-Control-Allow-Origin: *如果您还想使用 XHR 的withCredentials选项来发送 cookie 标头,这将不起作用在这种情况下,您确实需要指定一个特定的域。
2021-04-29 14:05:27
如果我理解正确,如果您不能更改服务器,这并不能解决原始问题
2021-05-04 14:05:27
-1 它没有回答问题。OP 要求浏览器端配置
2021-05-11 14:05:27

您是否尝试过使用 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 请求中。

我们正在使用它来检索 json 数据,但这是合并到页面中的 html,它只是暂时的,因此更改 firefox 配置应该是最简单的事情
2021-04-19 14:05:27
为什么投反对票?使用框架的跨域功能是对这个问题的合理回应。问题中没有提到需要 HTML 的事实,只是在对我的回复的评论中。
2021-05-03 14:05:27

事情就是这样,没有办法“暂时”禁用跨域 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);
      }
   }

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

function myfunc(data) {
  alert(data);
}

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

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

请注意,您在服务器端生成的最终是一些在客户端执行的 JavaScript。

"<scr"+"ipt" 这看起来很恶意
2021-04-25 14:05:27
@JosephLust 请注意,在 Chrom 广泛使用之前,有人问过/回答过这个问题。
2021-05-03 14:05:27
当然,您可以暂时禁用它。例如,使用 --disable-web-security 启动 Chrome。
2021-05-09 14:05:27

我也试过使用“UniversalBrowswerRead”这个东西,但没有用。您也许可以添加一个“允许”标头,但我还没有真正尝试过这样做。它很新。

你可以在这里找到更多信息