天天看點

如何通過腳本給<input type="file">的控件指派

    今天一個朋友問我,如何在頁面上自動給<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&lt;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之前就執行完了,導緻輸入框接收不到輸入值。

繼續閱讀