2014-10-17 37 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