在 IE8 上获取访问被拒绝错误
Posted
技术标签:
【中文标题】在 IE8 上获取访问被拒绝错误【英文标题】:getting access is denied error on IE8 【发布时间】:2011-04-25 12:01:53 【问题描述】:我有一个 html 表单 (upload.htm),里面有一个 HTML 文件上传控件。
<form id="frmupload" name="upload" enctype="multipart/form-data" action="uploadhandler.ashx" method="post">
<input id="uploader" name="uploadctrl" type="file"/>
</form>
上面页面中还有一种 javascript 方法,如下所示:
function performUpload()
document.getElementById('frmupload').submit();
我在 iframe
内的页面 (uploadpage.htm) 内调用它:
<iframe id="docframe" src="upload.htm" style="display:none"></iframe>
我尝试从 uploadpage.htm 页面执行如下所示的语句:
var i = document.getElementById('docframe');
i.contentWindow.performUpload();
我收到一条错误消息,提示 访问被拒绝,并且我的调试器在我显示的第一个 JavaScript 函数处停止。这两个文件位于 Web 项目中的相同位置。他们也有相同的域名。那为什么会出现这个错误呢?
当然,之前我可以发布页面:当我没有为 HTML 上传控件设置 name
属性时。但是在我在 HTML 标记中设置 name 属性后,我得到了这个奇怪的错误。为什么我第一次没有得到这个?
看看@这个帖子 --> "Access is denied" when script tries to access iframe in IE8,但没有帮助。
【问题讨论】:
【参考方案1】:在两个 HTML 文件(一个位于框架中,另一个包含框架)中,尝试添加document.domain='example.com'
,其中“example.com”是您的域名。
【讨论】:
【参考方案2】:出于安全原因,IE 不允许从 javascript 操作 type="file" 输入元素。设置文件名或调用单击事件以显示浏览器对话框将导致表单提交时出现“访问被拒绝”错误 - Internet Explorer 很聪明地记住已调用的方法。
类似问题:http://www.webdeveloper.com/forum/showthread.php?t=181272
【讨论】:
必须重申这个答案。我一直在寻找表单上传的问题,实际上我在 IE 中使用自定义文件输入,这导致了访问被拒绝问题。伟大的洞察力,谢谢 我错过了什么?这个小提琴似乎证明了这个答案是错误的;使用 Ender/Bean 而不是 jQuery 我有 IE9 打开文件选择器并通过 JS 将表单提交到生成的 iframe,它似乎工作:jsfiddle.net/NkycS/27 啊哈,我明白了——我的文件输入没有名称属性。添加一个后,我确实收到拒绝访问错误:jsfiddle.net/NkycS/32 最佳答案:***.com/questions/572768/… Josh Crozier 的回答【参考方案3】:传统上,出于安全考虑,JavaScript 对 HTML input type="file"
的访问受到严格限制。 AFAIK,您不能在文件上传器元素上使用 JS 执行以下操作:
-
您无法读取元素的“值”,因为它包含文件名。
您无法通过 JS 启动文件选择菜单。
您无法通过 JS 触发文件上传器控件的提交。
所有这些都是为了防止恶意攻击,例如通过 JS 在后台窃取您的文件。我已经有一段时间没有玩过input type="file"
元素了,但我最好的猜测是你会在其他浏览器中遇到类似的问题(如果不是全部的话)。
您最好的选择是基于 Flash 的解决方案或一些新的 HTML5 控件。
此外,以下是有关该主题的官方参考:
http://msdn.microsoft.com/en-us/library/ms535263(v=vs.85).aspx
在上面页面的底部一直勾选“社区内容”。
【讨论】:
以上是关于在 IE8 上获取访问被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章
带有 AngularJS CORS 的 IE9、IE8 返回“访问被拒绝” - ASP.NET WebApi