一、解决在firefox中无法跨域访问的问题
AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息。至于成功接收到响应信息后的操作,就和普通的Web客户端程序类似了(一般用DOM将信息加到HTML组件中)。但问题就发生在了XMLHttpRequest组件上。虽然在大多数浏览器中(包括IE、Firefox等)都叫这个名子。使用方法也类似。但在进行某些操作时却有不同的效果。
就拿跨域访问的问题来说。让我们先看看如下的html中的javascript代码:
test.html
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">

// 获得IE和firefox浏览器中的XMLHttpRequest对象
function getXMLHTTPRequest()
{
    var myRequest = null;
    if(window.XMLHttpRequest)   // firefox
    {        
        myRequest = new XMLHttpRequest(); 
    }
    else if(typeof ActiveXObject != "#ff0000")  // IE
    {              
        myRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }          
    return myRequest;          
}

var myRequest;
function onReadyState()   // XMLHttpRequest处理异步访问状态时的事件
{
    if(myRequest.readyState == 4)   // 4表示成功获得相应信息
    {              
        var msg = document.getElementById("msg");
        msg.value = myRequest.responseText             
    }
}
function getServiceText()
{     
    myRequest = getXMLHTTPRequest();
    if(myRequest)
    {         
        myRequest.onreadystatechange = onReadyState;      
        try 
        {
            myRequest.open( "post", "http://www.blogjava.net", true);
        }
        catch(exception)
        {
            var msg = document.getElementById("msg");
            msg.value = exception;  
         } 
         myRequest.send("test");
    }         
}

</script>
    </head>
    <body>
        <input id="msg" type="text" />
        <input type="button" value="信息" onclick="getServiceText()" />
    </body>
</html>

如果在IE中访问上面的html文件,url如下:
http://localhost:8080/test.html
会弹出一个对话框,大概意思是说您已经跨域访问了,可能存在风险,是否继续。如果继续执行的话,仍然可以访问http://www.blogjava.net。但是在firefox中却更本无法访问其它域的url,并且会抛出“调用方法XMLHttpRequest.open 时权限不足”异常。解决的方法一般有两种,一种是修改firefox的设置,在firefox的地址栏中输入“about:config”,并找到signed.applets.codebase_principal_support,将其设为true。如图1所示。

                                         图1
但这种方法经过实现,仍然无法访问其他域的url,不知是不是新版的firefox把这个给屏蔽了。就算这种方法可行,也尽量不使用这种需要配置firefox的方法,而要使用编程的方法,在访问其它域之前,可以使用如下代码打开权限:
try 

    netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
}
catch (exception)

    alert(exception); 
}
要注意的是,上面的代码只能用在firefox中,因此,要将其放到只有firefox才能执行到的代码块中,如在下面的块中:
if(window.XMLHttpRequest)   // firefox
{        
    try 
    { 
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
    }
    catch (exception)
    { 
        alert(exception); 
    }
}
不能将上面的代码放到getXMLHTTPRequest中,应放到getServiceText中。
注:如果test.html在通过web服务器访问,而是按着访问本地文件时访问test.html时,在IE中不会出现上述的提示对话框,而是直接就可以访问其他的域。
二、其他的跨浏览器问题
 
不同浏览器的XMLHttpRequest虽然接口一样,但在不同浏览器中调用XMLHttpRequest的方法和属性的效果不同。如send方法,在IE中可以不传参数,如myRequest.send();仍然可以正常工作,而在firefox中,必须为send方法传一个参数,也就是说,在firefox中send方法参数没有默认值,必须为其赋值。为了通用起见,建议所有的send方法都为其赋一个参数值,哪怕是空串。
除了send方法,responseText属性也是一样,在IE中,responseText返回了整个web资源的内容,而在firefox中只返回web资源的第一行。

本文转自 androidguy 51CTO博客,原文链接:http://blog.51cto.com/androidguy/215351,如需转载请自行联系原作者

在Firefox中通过AJAX跨域访问Web资源相关推荐

  1. AJAX跨域访问解决方案

    Case I. Web代理的方式 (on Server A) 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果.此方案可以解决 ...

  2. [转]Ajax跨域访问问题-方法大全

    Case I. Web代理的方式 (on Server A) 即用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面,由该页面代替用户页面完成交互,从而返回合适的结果.此方案可以解决 ...

  3. apache ajax 跨域访问,AJAX跨域访问(从Tomcat8到Apache/Nginx)

    1.在Tomcat的Root目录下放入如下的文件 apache-tomcat-8.0.12X64\webapps\ROOT clientaccesspolicy.xml文件 crossdomain.x ...

  4. ie9以下兼容ajax跨域访问,解决ie9以下浏览器ajax请求报error拒绝访问方案 解决ie9以下浏览器ajax请求报400问题方案

    解决方案如下: 1.ie9以下兼容ajax跨域访问   2.ajax请求开始前添加 jQuery.support.cors = true;  允许跨域 3.ie浏览器设置允许通过域访问数据 并且 ur ...

  5. ajax总结(三):ajax跨域访问接口方法汇总

    ajax跨域访问接口方法和模板引擎的应用 一.学习跨域之前先要了解: 1.同源和跨域的概念 a.同源:协议头.域名.端口全部一样就叫同源; b.跨域:只要协议头,域名,端口任意一个不一样就是跨域. 因 ...

  6. jsonp跨域的缺点ajax缺点,浅析JSONP解决Ajax跨域访问问题的思路详解

    前几天,工作上有一新需求,需要前端web页面异步调用后台的Webservice方法返回信息.实现方法有多种,本例采用jQuery+Ajax,完成后,在本地调试了一切ok,但是部署到服务器上以后就出现问 ...

  7. Ajax跨域访问抱错 原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘

    当Ajax跨域访问,明明已经获取到访问的json数据但是浏览器报错CORS 头缺少 'Access-Control-Allow-Origin' : 解决方式一: 过滤器 package com.xet ...

  8. Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法

    当使用jQuery Ajax post请求时可能会遇到类似这样的错误提示 XMLHttpRequest cannot load http://xxxxxx. Origin http://xxxxxx ...

  9. js Ajax跨域访问

    -----------------------index.html <html> <head> <title>JQuery Ajax跨域访问</title&g ...

最新文章

  1. Genome-scale de novo assembly using ALGA 使用ALGA进行 基因组规模的从头组装
  2. 使用dokcer搭建个人博客网站
  3. Spring框架IoC和传统bean调用的区别
  4. 通过netstat+rmsock查找AIX端口对应进程
  5. [TypeScript] Deeply mark all the properties of a type as read-only in TypeScript
  6. HDU4392(反素数强大的模版)
  7. MySQL占用系统进程_MySQL的Sleep进程占用大量连接解决方法
  8. python 遗传算法精简版
  9. (四)在MLOps管道中进行持续训练
  10. 大规模数据作成时的注意点。
  11. 现在电脑的主流配置_2019~2020电脑配置清单主流配件(下)
  12. Linux配置本地/外网访问Apache服务器,手把手教你搭建Ngrok——以小米球Ngrok为例
  13. plc输入/输出模块的选择
  14. Ubuntu离线安装curl
  15. 采购入库单部分结算时是否自动暂估 参数 是的情况下
  16. 计算机六级准考证,99宿舍如何查询英语六级准考证号
  17. python3爬虫——模拟登录丁香园并提取信息
  18. 计算机下桌面显示不出来,电脑桌面文档不会在右边显示出来怎么办
  19. FasterReport
  20. ROS 2 Eloquent Elusor安装和使用汇总

热门文章

  1. 蓝桥杯 ADV-92 算法提高 求最大公约数
  2. 蓝桥杯 ADV-71 算法提高 判断回文
  3. 【Objective-C】栈(stack)和堆(heap)的区别
  4. 蓝桥杯 ADV-148算法提高 排队打水问题(贪心)
  5. 数字展示领域该这样用 沉浸式方案应用解读
  6. 【编译打包】nagios-4.0.4-2.el6.src.rpm
  7. 一个数据科学家对商学院的建议
  8. mysql-定时调用存储过程
  9. oracle silent 安装
  10. 软件过程评估和软件能力评价的方法与步骤