Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,是否可以通过编程方式启动文件浏览器对话框?_Javascript_Html - Fatal编程技术网

在JavaScript中,是否可以通过编程方式启动文件浏览器对话框?

在JavaScript中,是否可以通过编程方式启动文件浏览器对话框?,javascript,html,Javascript,Html,我希望有一个启动文件浏览器对话框的按钮,而不是使用标记 我的第一个想法是有一个隐藏的文件输入标签和一个按钮。我会使用按钮点击按钮来触发隐藏文件输入的onclick,但我一直无法使其正常工作 所以问题是,这可能吗?第二,有没有更好的方法来做到这一点,并且仍然能够以表单的形式发送信息 这将是降级功能的底层(从Flash到JavaScript(我们的网站没有JS就无法工作)),因此它只能使用基本的JS和HTML。是的,这是可能的(在大多数浏览器中)通过不透明 我过去曾这样做过(参见ceejayoz的回

我希望有一个启动文件浏览器对话框的按钮,而不是使用
标记

我的第一个想法是有一个隐藏的文件输入标签和一个按钮。我会使用按钮点击按钮来触发隐藏文件输入的onclick,但我一直无法使其正常工作

所以问题是,这可能吗?第二,有没有更好的方法来做到这一点,并且仍然能够以表单的形式发送信息


这将是降级功能的底层(从Flash到JavaScript(我们的网站没有JS就无法工作)),因此它只能使用基本的JS和HTML。

是的,这是可能的(在大多数浏览器中)通过不透明

我过去曾这样做过(参见ceejayoz的回答),但现在建议不要这样做。这是一个安全问题,未来不能依赖。一个更好的解决方案是逐步增强你的上传表单,这样文件输入就会被一个具有更多功能的基于Flash或Java的上传器所取代(或者在HTML 5中使用更好的功能,如果它们可用)。

我建议使用类似Flash的基于Flash的文件上传器,而不是试图破解浏览器的文件输入控件。我已经开始在我的一个项目中使用它,并且对此非常满意


你可以得到javascript回调,你可以为UI做任何你想做的事情(flash只是上传功能)。

我宁愿避免透明度技巧

这对我有用(使用jQuery):

以及HTML:

<input id="upload-box" style="visibility:hidden;height:0;" name="Photo" type="file" />
<input id="upload-click-handler" type="text" readonly />

它创建了一个文本输入和一个隐藏的上传输入,并将点击文本输入的按钮连接到隐藏的文件输入

当选择一个文件时,它将在文本输入中写回文件名,这与大多数用户期望从界面中看到的一致

应适用于FF、Chrome、IE9和+。我没有在IE8上测试它


这是一个例子。如果您喜欢,感谢您对我的答案进行投票。

您可以在没有任何安全问题的情况下进行投票。
只需在OnMouseCenter上编写代码,即可提升real upload按钮的zindex(您可以在其上使用不透明度或使其透明),然后您无需触发单击,只需使用用户的单击即可。

请注意,这是一个安全问题,可能会在将来的浏览器中采取措施防止出现这种情况。可能吗?对推荐?不,安全问题?当然。我已经检查过了,但它并没有达到我想要的效果。由于存在潜在的安全/弃用问题,我不会使用它。谢谢你的回复。这怎么会是一个安全问题呢?它只允许您控制文件选择UI小部件的显示。它仍然取决于用户的行为。它被称为点击劫持,可以用来让人们点击不可见的Facebook按钮。在使用flash或java小程序之前,你应该始终使用普通形式。@Jan,这就是我在回答中说的:“逐步增强”这意味着你从简单的HTML开始,并在加载后在客户端(JS、Flash等)对其进行增强。。。见下面我的答案。也许这是浏览器兼容性的问题。这个问题已经有6年了。它只返回文件名,但如何获取文件的完整路径,如
c:/test.png
@jerith2,您无法获取完整路径,而且它也没有任何用处。如果要查看文件的二进制数据(您可以根据需要将其转换为任何其他数据),可以使用
文件读取器
对象读取文件
<input id="upload-box" style="visibility:hidden;height:0;" name="Photo" type="file" />
<input id="upload-click-handler" type="text" readonly />