在 IE8 上访问被拒绝错误

IT技术 javascript file-upload internet-explorer-8 cross-domain access-denied
2021-02-10 09:15:44

我有一个 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();
}

我在一个页面(uploadpage.htm)中调用它iframe

<iframe id="docframe" src="upload.htm" style="display:none"></iframe>

我尝试从uploadpage.htm页面执行如下所示的语句

var i = document.getElementById('docframe');
i.contentWindow.performUpload();

我收到一条错误消息,说Access is denied,并且我的调试器在我展示的第一个 JavaScript 函数处停止。这两个文件位于 Web 项目中的同一位置。他们也有相同的域名。为什么我会收到这个错误?

当然,之前我可以发布页面:当我没有name为HTML上传控件设置属性时。但是在 HTML 标记中设置 name 属性后,我收到了这个奇怪的错误。为什么我第一次没有得到这个?

看看@this post -->当脚本尝试访问 IE8 中的 iframe 时“访问被拒绝”,但它没有帮助。

3个回答

由于安全原因,IE 不允许从 javascript 操作 type="file" 输入元素。设置文件名或调用单击事件以显示浏览器对话框将导致表单提交中出现“访问被拒绝”错误 - Internet Explorer 很聪明地记住调用了哪些方法。

类似问题:http : //www.webdeveloper.com/forum/showthread.php?t=181272

啊哈,我明白了——我的文件输入没有名称属性。我一添加,就会收到拒绝访问错误:jsfiddle.net/NkycS/32
2021-03-29 09:15:44
最佳答案在这里:stackoverflow.com/questions/572768/... Josh Crozier 的回答
2021-04-02 09:15:44
我错过了什么?这个小提琴似乎证明这个答案是错误的;使用 Ender/Bean 而不是 jQuery 我让 IE9 打开文件选择器并将表单提交到生成的 iframe 全部通过 JS 并且它似乎工作:jsfiddle.net/NkycS/27
2021-04-09 09:15:44
必须重申这个答案。我疯狂地寻找表单上传的问题,实际上我在 IE 中使用了自定义文件输入,这导致了访问被拒绝问题。伟大的洞察力,谢谢
2021-04-13 09:15:44

传统上,input type="file"出于安全考虑,JavaScript 对 HTML 的访问受到严重限制。AFAIK,您不能在文件上传器元素上使用 JS 执行以下操作:

  1. 您无法读取元素的“值”,因为它包含文件名。
  2. 您无法通过 JS 启动文件选择菜单。
  3. 您不能通过 JS 触发文件上传控件的提交。

所有这些都是为了防止恶意攻击,例如通过 JS 在后台窃取您的文件。我有input type="file"一段时间没有玩过元素了,但我最好的猜测是你也会在其他浏览器中遇到类似的问题(如果不是全部的话)。

您最好的选择是基于 Flash 的解决方案或一些新的 HTML5 控件。

此外,这是有关该主题的官方参考:

http://msdn.microsoft.com/en-us/library/ms535263(v=vs.85).aspx

在上一页的底部一直检查“社区内容”。

在两个 HTML 文件中——一个在框架中,另一个包含框架——尝试添加document.domain='example.com'“example.com”是你的域名。