【问题标题】:Internet Explorer: Can't Access IFrame Contents Unless Status Code is 200Internet Explorer:除非状态代码为 200,否则无法访问 IFrame 内容
【发布时间】:2012-07-30 23:33:34
【问题描述】:

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

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

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

【问题讨论】:

  • 返回什么状态码?
  • 我尝试了 403、404 和 500。它们都使 iframe 内容无法访问(产生上述错误消息)。但是,任何 2xx 或 3xx 状态代码似乎都可以。我可能可以测试更多的状态代码,但我认为模式很清楚 - 状态代码 (4xx, 5xx) 指示的任何服务器或客户端错误都会导致此错误。
  • Windows XP 上的 IE8 似乎没有这个问题。 IE8 中的 IE9 和 Windows 7 上的 IE9 模式一样,Windows 8 上的 IE10 也是如此。
  • 你试过其他浏览器吗?你有 jsfiddle 或其他演示代码显示问题吗?
  • 我想我已经解决了这个问题。它与 IE 的“显示友好错误消息”“功能”有关。我尝试用代码示例发布更长的答案,但堆栈溢出不会让我再过 4 个小时(另一个很酷的“功能”)。

标签: javascript html internet-explorer iframe


【解决方案1】:

我想我在尝试在提琴手上重现问题时已经解决了这个问题。关闭 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-02-01
    • 2011-06-17
    • 2020-12-22
    • 2018-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多