Internet Explorer:可以't访问IFrame内容,除非状态代码为200
Internet Explorer: Can't Access IFrame Contents Unless Status Code is 200
因为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错误报告的地方,这样我们就可以更好地处理这个可怕的浏览器了。
相关文章:
- 在状态更改时动态更改标头的内容
- 根据文件内容设置状态
- 通过PHP的标头(“内容处置:附件..”)下载文件后,将document.readyState的状态更改为“完成”
- Internet Explorer:可以't访问IFrame内容,除非状态代码为200
- 维护手动页面刷新时通过AJAX加载的状态/内容
- 内容编辑器 Web 部件脚本不在 IE 11 中运行(如果开发人员工具处于打开状态,则运行)
- 如何在内容可编辑元素中的文本失去焦点时保持该元素处于选中状态
- 当内容为空但超链接处于活动状态时删除元素
- 离子 - 在状态之间移动时,页面内容位于屏幕外部
- 在角度 md 中更改所选内容的状态时,$watch触发
- 仅在选项卡处于活动状态时运行内容脚本循环
- 单页网站粘性导航:更改内容元素的活动状态
- 包含 ajax 内容的页面不会记住浏览器后退按钮后的状态
- 仅当选项卡未处于活动状态时触发某些内容
- 加载内容后用状态代码刷新页面
- jquery如何在每次iframe更改状态时收集iframe的内容
- 根据单选按钮的状态变化使儿童内容出现/消失
- $_POST 变量保持活动状态多长时间,PHP 如何决定 post 数组中的内容
- 当扩展的内容脚本处于活动状态时设置图标
- 如何在应用所有样式并删除javascript的情况下捕获运行时html内容/状态