在IE8上获取访问被拒绝错误

deo*_*oll 45 javascript file-upload cross-domain access-denied internet-explorer-8

我有一个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>
Run Code Online (Sandbox Code Playgroud)

上面的页面中还有一个JavaScript方法,如:

function performUpload(){
    document.getElementById('frmupload').submit();
}
Run Code Online (Sandbox Code Playgroud)

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

<iframe id="docframe" src="upload.htm" style="display:none"></iframe>
Run Code Online (Sandbox Code Playgroud)

我尝试从uploadpage.htm页面执行下面的语句:

var i = document.getElementById('docframe');
i.contentWindow.performUpload();
Run Code Online (Sandbox Code Playgroud)

我得到一个错误,说访问被拒绝,我的调试器停止在我显示的第一个JavaScript函数.这两个文件都位于Web项目中的相同位置.他们也有相同的域名.为什么我会收到此错误?

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

看看@ this post - > "访问被拒绝"当脚本试图访问IE8中的iframe时,但它没有帮助.

Dun*_*unc 97

由于安全原因,IE不允许从javascript操纵type ="file"输入元素.设置文件名或调用click事件以显示浏览器对话框将导致表单提交"访问被拒绝"错误 - Internet Explorer很清楚要记住调用了哪些方法.

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

  • 啊哈,我知道了 - 我的文件输入没有名字属性.只要我添加一个,我就会收到拒绝访问错误:http://jsfiddle.net/NkycS/32/ (5认同)
  • 必须重申这个答案.我疯狂地寻找我的表单上传的问题,实际上我在IE中使用自定义文件输入,这导致访问被拒绝的问题.很有见地,thx (3认同)

Raj*_*jat 13

传统上,input type="file"出于安全考虑,对HTML的JavaScript访问受到严格限制.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

在上面的页面底部查看"社区内容".