SCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝

Posted

技术标签:

【中文标题】SCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝【英文标题】:SCRIPT5: Access is denied in IE9 on xmlhttprequest 【发布时间】:2011-08-13 05:22:26 【问题描述】:
var xhttp=new XMLHttpRequest();
xhttp.open('GET', 'foo.xml', false);

F12 弹回:SCRIPT5:访问被拒绝。在第 95 行,即 xhttp.open 行。

我的 javascript 看起来格式正确,而 Firefox 做了我认为应该做的事情。

我已经阅读了很多与此问题非常相似的问题,因此我查看了同源策略,但考虑到 foo.xml 与.html 文件。我在本地 Intranet 上打开了脚本权限,并告诉 McAfee 休息五分钟,以确保安全。我什至尝试以管理员身份运行 IE,所以这真的不是权限问题吗?为什么 IE 会被拒绝访问本地文件?

【问题讨论】:

【参考方案1】:
  $.ajax(
        url: '//freegeoip.net/json/',
        type: 'POST',
        dataType: 'jsonp',
        success: function(location) 
            alert(location.ip);
        
    );

此代码也适用于 https 网站

【讨论】:

【参考方案2】:

也许您想查看以下链接:

Making cross domain JavaScript requests using XMLHttpRequest or XDomainRequest XMLHttpRequest – Mozilla Developer Network A good summary of the jQuery x-domain requests Which browser supports x-domain?

【讨论】:

【参考方案3】:

我在 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
);

【讨论】:

【参考方案4】:

这个例子说明了如何使用 AJAX 从任何网站拉取资源。它适用于浏览器。我已经在 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】:

打开 Internet Explorer 开发工具, 工具 -> F12 开发者工具。 (我觉得你也可以按F12来获取)

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

问题应该得到解决。 享受

【讨论】:

【参考方案6】:

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

【讨论】:

“替换方法”是什么意思?我收到此错误消息,但我不知道是什么原因造成的。【参考方案7】:

很可能,您需要通过 SSL 提供 Javascript。

来源:https://www.parse.com/questions/internet-explorer-and-the-javascript-sdk

【讨论】:

【参考方案8】:

在 IE7、IE8 和 IE9 上,只需转到“设置”->“Internet 选项”->“安全”->“自定义级别”并更改“其他”下的安全设置,将“跨域访问数据源”设置为启用。

【讨论】:

@Skurpi 同意,这就是使用 IE 的代价。在我们的应用程序中,我们声明仅支持 Firefox 和 Chrome。如果我们的客户想要使用 IE,那么他们需要确保启用此设置,我们的 IE 客户自愿更改了他们的设置。 尝试从书签运行 XMLHTTPRequest 时,我不断收到此访问被拒绝错误。当我在页面上运行脚本时,它运行良好。这是唯一有效的解决方案。赢 7 IE 9。【参考方案9】:

可能您正在请求外部资源,这种情况下 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);

【讨论】:

【参考方案10】:

您可能在本地文件上有一个网络标记。请参阅http://blogs.msdn.com/b/ieinternals/archive/2011/03/23/understanding-local-machine-zone-lockdown-restricted-this-webpage-from-running-scripts-or-activex-controls.aspx 了解说明。

【讨论】:

感谢MOTW的解释。我的 XML 文件没有,我什至添加了一个以查看是否可以更改错误消息。没有这样的运气。【参考方案11】:

我认为问题在于文件在您的本地计算机上,而 IE 拒绝访问,因为如果它让脚本可以访问运行浏览器的计算机上的文件,那将是一个巨大的安全漏洞。 如果您可以访问服务器或可以用作其他组件的其他组件,也许您可​​以尝试将文件放在上面,然后像从网站一样运行脚本。

【讨论】:

奇怪的是,如果这是真的,IE 有一个很大的安全漏洞——我发现我可以通过声明一个 XML 数据岛和使用 datafld inline 来加载和操作这个文件。并不是说我喜欢这个想法,但它是我目前所拥有的最好的。

以上是关于SCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

从 onchange 触发 .click() 时 IE9 上出现“SCRIPT5 访问被拒绝”错误

防止 IE 中出现“SCRIPT5:访问被拒绝”错误

IE9:设置 document.domain 时访问被拒绝

SCRIPT5:访问被拒绝。在 IE 上使用 parse.js

change,propertychange,input事件小议

Vue兼容ie9+