Chrome扩展程序弹出窗口中的文件输入

时间:2014-05-24 08:36:10

标签: javascript google-chrome input google-chrome-extension chromium

我希望用户能够通过我的扩展程序的browserAction弹出窗口上传文本文件作为输入,但我遇到了一些问题。

我一直在使用隐藏的input标记,当用户点击文件上传按钮时,我会使用click()触发该标记。文件浏览器对话框打开,所有内容似乎都运行良好,直到弹出窗口自动关闭。由于包含input代码关闭的“网页”,change事件永远不会触发。

由于扩展程序已经有一个后台脚本用于使用持久数据填充弹出窗口,我想我可以在后台脚本中创建input并使用{{1}触发 当用户点击弹出窗口中的文件上传按钮时。

但是,即使在后台脚本中为.click()触发click事件,也不会打开文件浏览器对话框。

我认为这是因为Chrome不允许以编程方式触发文件输入,除非是通过用户操作,但我不确定。这就是我尝试的方式;

popup.js

input

background.js

//Button in popup which should open file broswer dialog
//when clicked
browseBtn.addEventListener('click', function() {
    chrome.runtime.sendMessage({msg: 'file_input'});
}

我知道var fileInput = document.createElement('input'); fileInput.type = 'file'; fileInput.accept = 'text/*'; fileInput.addEventListener('click', function(e) { console.log('fileInput clicked'); }, false); fileInput.addEventListener('change', function(e) { console.log('fileInput changed'); console.log(this.files); }, false); chrome.runtime.onMessage.addListener(function(e) { if(e.msg === 'file_input') fileInput.click(); }); 事件已被触发,因为已记录click。但是,文件浏览器对话框无法打开。

我还使用fileInput clicked尝试使用此代码的变体来直接调用chrome.extension.getBackgroundPage()。同样,fileInput.click()事件被触发,但对话框未打开。

我的问题是;有没有办法让后台脚本触发文件click来打开文件浏览器对话框?这将是最好的解决方案,因为即使弹出窗口以某种方式关闭,它也允许扩展从指定文件中提取数据。

如果没有,是否有办法避免在文件浏览器对话框打开时关闭弹出窗口?根据我的发现,使用隐藏的input标签应该是一种解决方案,它确实适用于某些情况,但不适用于所有用户。

例如,我可以在Chrome,Windows 7上关闭没有弹出窗口的文件。但是,在Chromium,Ubuntu 14.04上,弹出窗口会在文件浏览器对话框打开的瞬间关闭。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

看起来这可能只是fixed,我等着它也可以使用!