C# · 12月 26, 2021

c# – 从onchange触发.click()时,IE9上的“SCRIPT5访问被拒绝”错误

我们希望减少用户在我们网站上上传文件所需的步骤数量;所以我们使用jQuery使用以下标记来打开和回传文件(简化): <a onclick=”$(‘#uplRegistrationImage’).click();”> Change profile picture</a><!– Hidden to keep the UI clean –><asp:FileUpload ID=”uplRegistrationImage” runat=”server” ClientIDMode=”static” Style=”display:none” onchange=”$(‘#btnSubmitImage’).click();” /><asp:Button runat=”server” ID=”btnSubmitImage” ClientIDMode=”static” Style=”display:none” OnClick=”btnSubmitImage_OnClick” UseSubmitBehavior=”False” />

这在Firefox和Chrome中工作得很好点击链接打开文件对话框,并在选择文件时触发回发.

然而在IE9中,文件上传已经加载并且用户已经选择了一个文件;安装OnChange工作我得到一个“SCRIPT5访问被拒绝”的错误.我尝试设置一个任意超时,设置间隔来检查文件是否被赋予无效.

还有一些与此有关的其他问题;然而没有一个似乎有一个体面的答案(一个说设置文件对话框是透明的,并悬停在一个按钮后面!)

有没有人解决这个问题?还是我绝对需要为IE用户提供按钮?

解决方法 出于安全考虑,您尝试做的是不可能的.似乎是IE9不会让你以这种方式提交表单,除非它是实际的鼠标点击文件上传控制,它触发它.

为了方便起见,我可以使用你的代码在变更处理程序中进行提交,但只有当我自己单击浏览按钮时,它才起作用.我甚至在$(document).ready方法中设置由更改处理程序设置的变量来指示提交应该被触发的变量 – 这也不起作用.

这个问题的解决方案似乎是:

>以这样的方式对控件进行样式化,即它位于按钮后面.你在你的问题中提到这个问题,但是由Romas这个In JavaScript can I make a “click” event fire programmatically for a file input element?提供的答案实际上是工作(我在IE9中尝试过,Chrome v23和FF v15).
>使用基于Flash的方法(GMail执行此操作).我尝试了Uploadify演示,似乎工作相当不错.

造型文件上传:

http://www.quirksmode.org/dom/inputfile.html

http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

参考文献:

jQuery : simulating a click on a <input type=”file” /> doesn’t work in Firefox?

IE9 file input triggering using Javascript

getting access is denied error on IE8