4

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

谷歌搜索没有任何结果,所以我在这里寻求帮助。其他人可以重现这种奇怪的行为吗?反正有这个问题吗?

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

4

1 回答 1

4

我想我在尝试在提琴手上重现问题时已经解决了这个问题。关闭 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 错误报告的地方,这样我们就可以更好地处理这个可怕的浏览器了。

于 2012-08-02T09:48:41.177 回答