2014-10-17 41 views
0

我想寫一個瀏覽器插件,自動將文件上傳到頁面上。所以這將在純Javascript中完成。只通過Javascript觸發文件上傳

這是我/知道:

  1. 在計算機中的文件上傳輸入

  2. 文件的名稱和位置input#someId

我想「硬編碼「在console現在作爲」概念驗證「,但我不能得到它的工作。

我已經嘗試了這兩種方法:

  1. inputElement.click()inputElement是輸入的querySelector

  2. 使用initMouseEventwhat's the equivalent of jquery's 'trigger' method without jquery?但給了我錯誤Uncaught TypeError: Cannot read property 'dispatchEvent' of null

所以我的問題是:

  1. 如何觸發點擊文件上傳元素的輸入?

  2. 更好:如何完全處理上傳?基本上通過文件名+位置上傳到啓動(當用戶點擊像OK打開從對話框中選擇文件)

更新1:

我是從閱讀本http://www.thecssninja.com/javascript/fileapi 也許上傳文件文件系統是不可能的。如何對這些備選方案:

  1. 我們可以從網址(http)的

  2. 的文件僅僅是圖像和Javascript中存儲的(Base64)

任何上述的獲取文件應該可以,如果他們可以自動上傳並繞過對話框並通過本地文件系統搜索文件。我在想,如果圖像DOM甚至畫布可以被拖動?

+2

您實際上無法做到這一點,瀏覽器不會讓您以編程方式觸發文件上傳器出於安全目的。必須有用戶交互 – Brennan 2014-10-17 20:10:29

+0

從用戶機器上自動上傳文件將是一個主要的安全風險。文件上傳需要手動用戶交互(因此需要明確同意)。如果您訪問過的網站自動將您的瀏覽器設置上傳到遠程服務器,您是否希望它? – Terry 2014-10-17 20:12:54

+0

http://stackoverflow.com/questions/15249185/local-chrome-extension-to-set-file-of-input-type-file – epascarello 2014-10-17 20:13:24

回答

1

正如人們所評論的,你不能那樣做。出於安全原因,您絕對不能訪問編程式填充文件輸入。想想看,有些老兄可能會添加一個簡單的腳本來從您的計算機上竊取文件,而您甚至不知道!

據我所知,無法做到。

+0

也許可以通過java來完成。 Java可以做任何類型的病態的東西。 – 2014-10-17 23:28:14

+0

是的,因爲你需要允許小程序運行,並且會被警告你應該信任它......所以基本上,你打開了門,讓它做任何你想做的事情 - 但JavaScript總是運行,所以你沒有得到有機會「允許」它,所以默認情況下它不支持這種功能。 – 2014-10-18 04:02:07

+1

是的,我知道。不過我記得java applets的警告較少的時候... – 2014-10-18 09:39:25