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 XDomainRequestXMLHttpRequest
– 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 访问被拒绝”错误
SCRIPT5:访问被拒绝。在 IE 上使用 parse.js