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

Rik*_*tor 9 javascript google-chrome input chromium google-chrome-extension

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

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

由于延长已经拥有用于填充与持久性数据弹出后台脚本,我想我可以创建input在后台脚本,并触发.click()当用户点击,在弹出的文件上传按钮.

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

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

popup.js

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

background.js

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();
});
Run Code Online (Sandbox Code Playgroud)

我知道click事件已被触发,因为fileInput clicked已记录.但是,文件浏览器对话框无法打开.

我也尝试使用这个代码的变体chrome.extension.getBackgroundPage()来直接调用fileInput.click().同样,click事件被触发但对话框没有打开.

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

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

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

任何帮助表示赞赏.

Abd*_*aly 1

看来这个问题刚刚被修复了,我也在等待它的发布!

  • 该错误似乎只涉及 OS X,而最初的问题是关于 Ubuntu 的。这可能仍然是一个悬而未决的问题。 (3认同)