通过编程方式在iframe中选择一个输入类型的文件,然后上传会给出Access is denied错误

javascript Programmatically select a file in Input type file inside a iframe and upload gives Access is denied error

本文关键字:然后 文件 denied 错误 is Access 类型 输入 iframe 方式 编程      更新时间:2023-09-26

我在主页里面有一个iframe。当在iframe中单击按钮(在form1中)时,它会进行AJAX调用,响应html将是表单(例如form2)中的输入类型文件和输入类型按钮,响应将放在div中以在正常屏幕上显示为弹出窗口。使用输入类型文件,用户可以选择一个文件,当按钮被单击时,它将调用一个函数来提交表单,文件将被上传到服务器。

要求以编程方式单击输入类型文件并显示文件打开对话框。当用户选择一个文件时,我们需要以编程方式单击按钮以提交到服务器。

我尝试在AJAX响应填充后通过javascript从主页以编程方式单击输入类型文件。用户可以选择文件,但是通过编程方式点击该按钮会导致IE出现"拒绝访问"错误。

不使用任何js库。我需要使用任何额外的库来实现这一点吗?

要求以编程方式单击输入类型文件并显示文件打开对话框。

此要求不能可靠地满足。有些浏览器会在input type="file"上响应click(),有些则不会,有些浏览器(IE)表面上允许,但实际上拒绝提交表单。

没有解决办法,也没有库可以避免这种限制——除非使用一些非html的方式上传文件,比如Flash或Java。

更重要的是,在HTML标准中甚至没有要求文件打开对话框。这是特定于浏览器和操作系统的接口细节。Windows桌面浏览器以外的其他平台可能有其他提交文件的机制,比如拖放。你不能在这个级别与文件上传字段进行有意义的交互。

当用户选择一个文件时,我们需要通过编程方式点击按钮提交给服务器。

这是可行的。捕捉change事件:

<form method="post" action="..." enctype="multipart/form-data">
    <input type="file" id="f"/>
</form>
document.getElementById('f').onchange= function() {
    if (this.value!=='')
        this.form.submit();
};