今天一个朋友问我,如何在页面上自动给<input type="file"/>赋值,这个问题我以前也没实现过,今天小研究了一把. 把<input type="file"/>设计只读且不允许自动赋值的目的是出于安全性考虑,试想一下,如果允许程序自动赋值,那么也可以在服务器生成页面时放置一段脚本,在浏览器访问该页面后,自动把本地的某一个重要文件路径赋值到一个文件上传控件,然后自动上传到服务器,那会是多可怕的事情!! 一个恶意网站就可以把我们机器上的一些机密文件神不知鬼不觉地盗走了. 既然不允许赋值,在有些情况下又要求实现文件自动上传,到底能不能实现呢? 有一种办法,就是模拟键盘输入来达到赋值的目的,先贴代码:
<input name="myfile"type="file"/>
<script language="JavaScript">
window.attachEvent("onload", setfile);
var WshShell=new ActiveXObject("WScript.Shell");
function setfile(){
for(i=0;i<4;i++) {
setTimeout('document.all.file['+i+'].focus();
WshShell.sendKeys('+i+');',i*20);
}
}
</script>
这段代码是通过WScript.Shell控件来实现模拟键盘输入的效果: WshShell.sendKeys('+i+'); 在模拟键盘输入之前,先把光标定位在要操作控件上: document.all.file['+i+'].focus(); 在给下一控件赋值之前,先停一段时间: setTimeout('document.all.file['+i+'].focus();
WshShell.sendKeys('+i+');',i*20); 这样做的目的是因为focus操作花费的时间比较长,而sendKeys操作又很快,如果不加上延时,sendKeys操作一般都在focus之前就执行完了,导致输入框接收不到输入值。