一、解决在firefox中无法跨域访问的问题
AJAX从本质上讲就是命名用XMLHttpRequest组件来向服务端发送HTTP请求,请接收相应信息。至于成功接收到响应信息后的操作,
就和普通的Web客户端程序类似了(一般用DOM将信息加到HTML组件中)。但问题就发生在了XMLHttpRequest组件上。虽然在大多数
浏览器中(包括IE、Firefox等)都叫这个名子。使用方法也类似。但在进行某些操作时却有不同的效果。
就拿跨域访问的问题来说。让我们先看看如下的html中的java script代码:
test.html
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/java script">
// 获得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。
但这种方法经过实现,仍然无法访问其他域的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资源的第
一行。
分享到:
相关推荐
标题中的“在Firefox中通过AJAX跨域访问Web资源”是指使用Asynchronous JavaScript and XML (AJAX)技术在Mozilla Firefox浏览器中实现跨域数据请求。跨域是由于浏览器的同源策略(Same-origin policy)限制,它阻止...
例如,使用Edge浏览器可以避免这类问题,然而在Firefox中可能会遇到同样的CORS错误。 3. 另一个可行的方案是在集成开发环境(IDE)中工作,比如Webstrom,这类IDE通常内置了HTTP服务器。通过这种方式,开发者可以...
Web2.0 和 SNS 的兴起,Web 应用对跨域访问的需求也越来越多,为此 W3C 工作组中的 Web Applications Working Group 发布了一个 Cross-Origin Resource Sharing(跨域资源共享规范)推荐规范来解决跨域请求的问题。...
标题《JS跨域访问解决方案总结.pdf》指明文档的核心内容是关于JavaScript跨域访问问题的解决方法。跨域访问问题是指由于浏览器的同源策略限制,网页中JavaScript代码出于安全原因不能访问另一个源(域名、协议或端口...
JavaScript跨域访问解决方案详解 在Web开发中,由于浏览器的安全策略——同源策略(Same origin policy),一个域名下的脚本无法直接访问另一个不同域名的资源。同源策略规定,只有当两个页面的协议、域名和端口...
它支持多种现代浏览器,包括 Chrome、Firefox、Safari、Edge 和 Internet Explorer。 在浏览器中查看 PDF 文件时,可能会遇到一些问题,比如文件加载缓慢、显示不完整或无法正确处理交互等。PDF.js 的出现解决了...
现在的web工程越来也大,传统的开发模式已经显得捉襟见肘了,不仅开发人员在开发过程中很痛苦,后期维护的人员也更痛苦。...下面我们介绍一种测地解决前端跨域访问的方式,本地服务器请求转发的方式。
在开发讯息在线产品时,发现 IE 浏览器(v7/8)都无法登录(总是提示验证码不匹配错误),而其他浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。 初步分析:服务器端日志中显示 sessionId ...
JavaScript 和 CSS 在不同的浏览器之间可能存在兼容性问题,尤其是在 Internet Explorer (IE) 和 Mozilla Firefox 这两个浏览器中。本文将详细探讨这些差异,并提供相应的解决策略,以确保网站在各种浏览器中都能...
综上所述,解决Firefox和IE兼容性问题需要对各个层面的差异有深入理解,并采用适当的技术和策略。通过良好的编码习惯、使用兼容性库、充分的测试,开发者能够创建出在多种浏览器环境下都能稳定运行的网页应用。
在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...
6. **浏览器兼容性**:考虑到不同的浏览器对跨域策略和打印功能的支持程度不同,开发者需要确保代码在主流浏览器(如Chrome、Firefox、IE/Edge等)中都能正常工作。 7. **安全性与性能优化**:在实施跨域打印时,...
在总结中,本文针对JavaScript中的AJAX技术、JQuery中的AJAX封装,以及JSONP跨域访问技术,进行了全面的分析和小结。内容涵盖了从创建XMLHttpRequest对象,到使用AJAX发起异步请求,再到通过JSONP实现跨域访问的一...
标题中的问题直指一个特定的技术挑战,即在Apache和Nginx服务器环境下,Font Awesome图标在Firefox浏览器中无法正常显示。Font Awesome是一个流行的图标库,它利用Web字体技术来提供各种矢量图形,广泛用于网站设计...
值得注意的是,这种方法虽然可以解决在Firefox中预览本地图片的问题,但仍然受限于浏览器的安全策略。比如,如果用户的浏览器启用了“禁止加载本地文件”(block local file inclusion)的设置,或者在严格的隐私...
但这种方法不能用于实时通信,且在某些浏览器中有限制,如Firefox早期版本不支持跨域访问本地存储。 **6. Flash或ActiveX** 虽然现在Flash和ActiveX已逐渐被淘汰,但过去它们曾被用来解决跨域问题,通过Flash或...
在本文中,我们将深入探讨一个特定的场景:如何解决在Firefox中使用ExtJS框架时,关闭并重新打开包含iframe的窗口后,js函数无法访问的问题。这个问题在其他浏览器如IE和Chrome中并未出现,但对Firefox用户来说是个...
虽然大多数情况下,跨域问题都由后端或反向代理服务器解决,但在某些开发环境中,我们可能需要直接在浏览器中配置跨域。对于 Chrome 和 Firefox 浏览器而言,也有相应的设置方式: - **Chrome**:可以在启动参数中...
"Iframe高度自适应(兼容IE/Firefox、同域/跨域)"这一主题是关于如何让内嵌在Iframe中的页面能够根据其内容动态调整自身的高度,确保在不同浏览器(如IE和Firefox)以及处理同域和跨域情况时都能正常显示。...