2

我正在构建一个供内部使用的Chrome扩展,用户只需一步就可以上传文件。这是总是相同的文件,我想跳过浏览对话框,并直接为输入字段分配正确的值。绕过浏览文件/上传文件对话框

该文件与插件代码分开。

这是可能的Javascript或开发Chrome,Firefox扩展?

我曾尝试:

input.val("file://C:/random.txt") 

,然后提交周围的表单。但那并不奏效。

+1

它必须是一些Chrome扩展的API中。没有办法用标准的API来做到这一点。即使[File API](http://www.w3.org/TR/FileAPI/)也要求用户告诉你文件的位置。 –

+1

如果您对Chrome扩展程序感兴趣,那么为什么添加firefox-addon标签? –

+0

@WladimirPalant我可能会考虑开发一个ff扩展,如果这是可能的int int那个部分 – momomo

回答

2

火狐:

你想要什么似乎是根据this answer可能的,但我还没有仔细研究它。

铬:

NPAPI plugin之外,这是绝对不可能的。您的浏览器无法访问文件系统,除非用户通过文件对话框明确要求它这样做。如果Web上的任何页面都能够以编程方式设置文件路径,然后在用户单击表单按钮时获取该文件,则会引起严重的安全问题。

所以,一个正常的网页显然不能这样做。如果一个Chrome扩展可以这样做(即读取文件系统中的任何文件),那么它最低限度需要特殊许可。 list of permissions不包含文件系统访问,所以这是不可能的。

正如我在开头提到的那样,唯一的选择是开发一个NPAPI插件来为你读取文件,这就像建造医院治疗疙瘩一样。 NPAPI具有非常陡峭的开发学习曲线,并且引入了重要的安全问题(因为您的扩展现在可以充当本地用户,安全性妥协的成本要高得多)。

如果您愿意将该文件放在浏览器的virtual HTML5 filesystem上,那么您可以这样做。没有你的需求的具体知识,我不能说这是否适合你。

2

如果你的目标是发送一个文件到服务器,然后尝试在<input>字段中选择它是错误的方式 - 你可以直接创建一个FormData objectsend it via XMLHttpRequest。请注意,您也可以从现有表单创建一个FormData对象。这适用于Firefox和Chrome,甚至可以在网页中使用(当然,通常会使用同源限制)。

棘手的部分是获取File object,你可以添加到表单数据。据我所知,除了使用NPAPI插件之外,Chrome扩展没有直接的文件系统访问权限 - 因此他们无法从用户的磁盘驱动器获取文件,他们只能使用某些数据创建blob。然而Firefox扩展有File constructor,允许他们通过路径创建一个File对象。

所以在Firefox中,你会做这样的事情:

var formdata = new FormData(); 
formdata.append("file", new File("file://C:/random.txt")); 

var request = new XMLHttpRequest(); 
request.open("POST", "http://my.server/submitFile"); 
request.send(formdata); 
+0

我的目标是提交一个现有的表单,希望通过点击提交按钮,并在选择正确的文件之前。我无法自己发送文件。我只是自动点击一个现有的本地服务器管理控制台(Websphere) – momomo