从onchange触发.click()时,IE9上的"SCRIPT5访问被拒绝"错误

Luk*_*ett 9 javascript c# asp.net jquery internet-explorer

我们希望减少用户在我们网站上传文件所需的步骤数; 所以我们使用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" />
Run Code Online (Sandbox Code Playgroud)

这在Firefox和Chrome中运行得非常好; 单击链接时打开文件对话框,并在选择文件时触发回发.

但是在文件上传加载并且用户选择了文件后的IE9中; 在OnChange工作的内容我得到"SCRIPT5访问被拒绝"错误.我已经尝试设置任意超时,设置间隔以检查文件是否无效.

还有其他一些与此有关的问题; 但是没有一个看起来有一个像样的答案(有人说将文件对话框设置为透明并悬停在按钮后面!)

有没有人解决这个问题?或者我是否必须为IE用户提供按钮?

nic*_*k_w 13

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

为了论证,我能够使用你的代码在change处理程序中进行提交,但它只在我Browse自己点击按钮时才有效.我甚至在$(document).ready方法中设置了一个由change处理程序设置的变量的轮询,指示应该触发提交 - 这也不起作用.

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

  1. 以这样的方式设置控件的样式,使其位于按钮后面.您在问题中提到了这一点,但Romas在这里提供的答案在JavaScript中,我可以通过编程方式为文件输入元素启动"单击"事件吗?实际上工作(我试过IE9,Chrome v23和FF v15).
  2. 使用基于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:模拟点击<input type ="file"/>在Firefox中不起作用?

IE9文件输入使用Javascript触发

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