[英]File Input in Chrome Extension popup
我希望用户能够通过我的扩展程序的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'});
}
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();
});
我知道click
事件已触发,因为记录了fileInput clicked
。 但是,文件浏览器对话框不会打开。
我还尝试使用chrome.extension.getBackgroundPage()
直接调用fileInput.click()
来修改此代码。 再次,触发了click
事件,但是对话框没有打开。
我的问题是; 有没有办法允许后台脚本触发文件input
以打开文件浏览器对话框? 那将是最好的解决方案,因为即使扩展以某种方式关闭,它也允许扩展名从指定的文件中提取数据。
如果没有,有没有办法避免在打开文件浏览器对话框时关闭弹出窗口? 从我发现的结果来看,使用隐藏的input
标签应该是一种解决方法,并且在某些情况下确实有效,但并非适用于所有用户。
例如,我能够上载文件而不会在Windows 7的Chrome上关闭弹出窗口。但是,在Chromium,Ubuntu 14.04上,弹出窗口会在打开文件浏览器对话框时立即关闭。
任何帮助表示赞赏。
看来这可能已经修复 ,我也在等待它可用!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.