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上,弹出窗口在文件浏览器对话框打开的瞬间关闭.
任何帮助表示赞赏.
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |