Internet Explorer:可以't访问IFrame内容,除非状态代码为200

Internet Explorer: Can't Access IFrame Contents Unless Status Code is 200

本文关键字:内容 状态 代码 IFrame 访问 可以 Explorer Internet      更新时间:2024-06-21

因为IE不支持异步文件上传,所以我使用了一种将表单发布到iframe的解决方案。我绑定iframe的onLoad事件,并在事件触发时读取其内容。这运行良好,除非服务器返回200以外的状态代码,在这种情况下,IE8/IE9会抛出"SCRIPT5:拒绝访问"错误。微软似乎已经决定,除非请求返回200 OK,否则任何人都不应该被允许读取iframe的内容

谷歌搜索一无所获,所以我在这里寻求帮助。其他人能重现这种奇怪的行为吗?这个问题到底有没有?

iframe不违反任何跨站点安全策略。都在同一个域上。

我想我在试图重现fiddler上的问题时已经解决了这个问题。关闭IE中的"显示友好的HTTP错误消息"似乎可以修复它。我无法在fiddler上复制它的原因是他们的404页面超过512字节,因此它会显示nginx错误。

基本上,整个问题是,当一个页面小于512字节(在某些情况下为256字节)时,IE似乎会替换整个页面,这会导致以编程方式阻止对该页面的访问。显然,微软的疏忽似乎仍然存在于IE10中。

它很容易复制。只需将以下内容放在服务器下的文件(例如test.html)中,即可返回512字节以下的404响应代码,并确保您的IE设置为显示友好的错误消息(同时确保"test1.file"实际上不存在)。打开开发者控制台,用IE点击页面,你会看到一个"拒绝访问"错误。刷新页面的方式会改变结果。CTRL+F5似乎没有显示出问题,但CTRL+R或F5显示出了问题。

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<script type="text/javascript">
iframe = document.createElement('iframe')
iframe.src = '/test1.file'
document.body.appendChild(iframe )
iframe.contentDocument
</script>
</body>
</html>

现在,如果我能找到我可以提交IE10错误报告的地方,这样我们就可以更好地处理这个可怕的浏览器了。