2011-04-26 77 views
44
var xhttp=new XMLHttpRequest(); 
xhttp.open('GET', 'foo.xml', false); 

F12弹回到:SCRIPT5:访问被拒绝。 95行,这是xhttp.open行。SCRIPT5:访问IE9被拒绝上的XMLHttpRequest

我的JavaScript似乎早有形成,和Firefox做什么,我认为它应该。

我读了很多的问题非常相似,这一个,所以我已经签出同源策略,但我看不出它会如何运用考虑foo.xml是在同一个目录中该html文件。我打开了本地Intranet的脚本权限,并告诉迈克菲需要休息五分钟才能确定。我甚至试图以管理员身份运行IE,所以这不可能是一个权限问题吗?为什么IE会被拒绝访问本地文件?

回答

0

我认为问题在于该文件位于本地计算机上,并且IE拒绝访问,因为如果它允许脚本访问浏览器正在运行的文件,那将是一个巨大的安全漏洞。
如果你有机会到服务器或者,你可以为一个使用,也许你可以尝试把这些文件上的那个,然后运行脚本,你会从一个网站的另一个可比。

+0

奇怪的是,如果这是真的,IE浏览器有一个大的安全漏洞 - 我发现我可以加载并通过声明一个XML数据岛操纵这个文件并使用datafld内联。不是我喜欢这个想法,但这是我现在最好的。 – 2011-04-27 04:12:15

0

也许你所要求的,外部资源,这种情况下,IE需要XDomain对象。请参见下面的代码示例如何使Ajax请求与交叉域的所有浏览器:

Tork.post = function (url,data,callBack,callBackParameter){ 
    if (url.indexOf("?")>0){ 
     data = url.substring(url.indexOf("?")+1)+"&"+ data; 
     url = url.substring(0,url.indexOf("?")); 
    } 
    data += "&randomNumberG=" + Math.random() + (Tork.debug?"&debug=1":""); 
    var xmlhttp; 
    if (window.XDomainRequest) 
    { 
     xmlhttp=new XDomainRequest(); 
     xmlhttp.onload = function(){callBack(xmlhttp.responseText)}; 
    } 
    else if (window.XMLHttpRequest) 
     xmlhttp=new XMLHttpRequest(); 
    else 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200){ 
      Tork.msg("Response:"+xmlhttp.responseText); 
      callBack(xmlhttp.responseText,callBackParameter); 
      Tork.showLoadingScreen(false); 
     } 
    } 
    xmlhttp.open("POST",Tork.baseURL+url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 
1

在IE7,IE8,IE9和刚进入设置 - > Internet选项 - >安全 - >自定义级别,改变安全“杂项”下的设置将“跨数据源访问数据源”设置为启用。

+51

-1因为你不能影响用户的设置 – Skurpi 2013-02-04 12:37:08

+4

@Skurpi同意,那么这就是使用IE的价格。通过我们的应用程序,我们声明只支持Firefox和Chrome。如果我们的客户想要使用IE,那么他们需要确保启用此设置,我们的IE客户端更改了他们的设置。 – 2013-02-08 16:32:26

+0

当试图从小书签运行XMLHTTPRequest时,我不断收到此访问被拒绝的错误。当我在页面上运行脚本时,它运行良好。这是唯一可行的解​​决方案。 Win 7 IE 9. – thefoyer 2013-02-12 17:18:06

4

这个例子说明如何使用AJAX可以从任何网站拉resourcess。它适用于各种浏览器。我已经在IE8-IE10,safari,chrome,firefox,opera上测试过它。

if (window.XDomainRequest) xmlhttp = new XDomainRequest(); 
else if (window.XMLHttpRequest) xmlhttp = new XMLHttpRequest(); 
else xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 

xmlhttp.open("GET", "http://api.hostip.info/get_html.php", false); 
xmlhttp.send(); 

hostipInfo = xmlhttp.responseText.split("\n"); 
var IP = false; 
for (i = 0; hostipInfo.length >= i; i++) { 
    if (hostipInfo[i]) { 

     ipAddress = hostipInfo[i].split(":"); 
     if (ipAddress[0] == "IP") { 
      IP = ipAddress[1]; 
     } 
    } 
} 
return IP; 
+5

不适用于HTTPS – 2013-12-26 19:31:55

2

此错误消息(SCRIPT5:访问被拒绝),如果没有找到.replace方法的目标页面,也可以遇到(我已经进入了网页的名称不正确)。我知道,因为它发生在我身上,这就是为什么我去寻找关于错误信息含义的更多信息。

+1

“替换方法”是什么意思?我有这个错误消息,但我无法弄清楚是什么导致了它。 – 2013-05-21 16:48:58

0

我曾在IE10面临着类似的问题。我有一种变通方法,通过使用jQuery的Ajax请求检索数据:

$.ajax({ 
    url: YOUR_XML_FILE 
    aync: false, 
    success: function (data) { 
     // Store data into a variable 
    }, 
    dataType: YOUR_DATA_TYPE, 
    complete: ON_COMPLETE_FUNCTION_CALL 
}); 
-3

打开Internet Explorer开发工具, 工具 - > F12开发人员工具。 (我想你也可以按F12 得到它)

更改文档模式标准。 (如果更改文档模式,页面应自动刷新)

问题应该修复。 享受

-1
$.ajax({ 
     url: '//freegeoip.net/json/', 
     type: 'POST', 
     dataType: 'jsonp', 
     success: function(location) { 
      alert(location.ip); 
     } 
    }); 

此代码将工作https网站也