我正在构建一个供内部使用的Chrome扩展,用户只需一步就可以上传文件。这是总是相同的文件,我想跳过浏览对话框,并直接为输入字段分配正确的值。绕过浏览文件/上传文件对话框
该文件与插件代码分开。
这是可能的Javascript或开发Chrome,Firefox扩展?
我曾尝试:
input.val("file://C:/random.txt")
,然后提交周围的表单。但那并不奏效。
我正在构建一个供内部使用的Chrome扩展,用户只需一步就可以上传文件。这是总是相同的文件,我想跳过浏览对话框,并直接为输入字段分配正确的值。绕过浏览文件/上传文件对话框
该文件与插件代码分开。
这是可能的Javascript或开发Chrome,Firefox扩展?
我曾尝试:
input.val("file://C:/random.txt")
,然后提交周围的表单。但那并不奏效。
火狐:
你想要什么似乎是根据this answer可能的,但我还没有仔细研究它。
铬:
的NPAPI plugin之外,这是绝对不可能的。您的浏览器无法访问文件系统,除非用户通过文件对话框明确要求它这样做。如果Web上的任何页面都能够以编程方式设置文件路径,然后在用户单击表单按钮时获取该文件,则会引起严重的安全问题。
所以,一个正常的网页显然不能这样做。如果一个Chrome扩展可以这样做(即读取文件系统中的任何文件),那么它最低限度需要特殊许可。 list of permissions不包含文件系统访问,所以这是不可能的。
正如我在开头提到的那样,唯一的选择是开发一个NPAPI插件来为你读取文件,这就像建造医院治疗疙瘩一样。 NPAPI具有非常陡峭的开发学习曲线,并且引入了重要的安全问题(因为您的扩展现在可以充当本地用户,安全性妥协的成本要高得多)。
如果您愿意将该文件放在浏览器的virtual HTML5 filesystem上,那么您可以这样做。没有你的需求的具体知识,我不能说这是否适合你。
如果你的目标是发送一个文件到服务器,然后尝试在<input>
字段中选择它是错误的方式 - 你可以直接创建一个FormData
object和send 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);
我的目标是提交一个现有的表单,希望通过点击提交按钮,并在选择正确的文件之前。我无法自己发送文件。我只是自动点击一个现有的本地服务器管理控制台(Websphere) – momomo
它必须是一些Chrome扩展的API中。没有办法用标准的API来做到这一点。即使[File API](http://www.w3.org/TR/FileAPI/)也要求用户告诉你文件的位置。 –
如果您对Chrome扩展程序感兴趣,那么为什么添加firefox-addon标签? –
@WladimirPalant我可能会考虑开发一个ff扩展,如果这是可能的int int那个部分 – momomo