FireFox 的xmlhttprequest控件域权限判断错误的bug

FireFox 的xmlhttprequest控件域权限判断错误的bug

测试代码如下:
xml.xml
一个简单的xml文件

<?xml version="1.0" encoding="gb2312"?>
<data>abc</data>


test.htm:
一个简单的使用xmlhttprequest获取xml资源的页面:

<html>
<head>
 
<script type="text/JavaScript">
 <!--
 document.domain="emu.emu.com"
 
var newsXML;
 
function init(){
  newsXML = window.XMLHttpRequest?(
new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"));//选择合适的xmlhttprequest控件
  newsXML.onreadystatechange= handleXML;
  newsXML.open("GET","xml.xml",
true);
  newsXML.send(
null);
 }
 
function handleXML(){
  
if(newsXML.readyState==4){
        alert(newsXML.responseText)
        
try{
            alert(newsXML.responseXML.getElementsByTagName("data").length)
        }
catch(e){
            alert(e)
        }
  }
 }
 
//-->
 </script>
</head>
<body onload="init()">
测试firefoxbug
</body>
</html>


注意这一行: 
document.domain="emu.emu.com"

配置WINDOWS\system32\drivers\etc\hosts

127.0.0.1       localhost
127.0.0.1       emu.emu.com


好了,开启apache把上面的xmlhtm文件发布出去,通过emu.emu.com域名来访问test.htm文件,结果报错:

调用方法 XMLDocument.getElementsByTagName 时权限不足


只要设置了domain,不管domain怎么设,getElementsByTagName 都肯定报权限不足错误。其实根本就没有任何跨域操作,而且连responseText都可以获得了,访问getElementsByTagName 还有什么权限限制的必要?莫名其妙!

IE下运行就很正常。在firefox下把document.domain="emu.emu.com"这一行删除后也运行正常,因此确定是firefoxbug

按照http://www.mozilla.org/projects/security/components/jssec.html 中的说明设置netscape.security.PrivilegeManager.enablePrivilege 来提升页面访问权限也无法解决此问题。

这个bug造成了合法的跨域xml请求(同一个父域)无法正确解析返回的xml数据(但是能访问文本信息)。这不是逼我用AjaH嘛?

你可能感兴趣的:(FireFox 的xmlhttprequest控件域权限判断错误的bug)