Pop-up Entrada de arquivo na extensão do Chrome
Desejo que o usuário possa fazer upload de arquivos de texto como entrada através dobrowserAction
pop-up para a minha extensão, mas tive um problema.
Eu tenho usado um ocultoinput
tag, que aciono comclick()
quando o usuário clica no botão de upload de arquivo. A caixa de diálogo do navegador de arquivos é aberta e tudo parece funcionar bem, até o próprio pop-up fechar. E por causa da 'página da web' que contém oinput
fechamento de tag, ochange
evento nunca é acionado.
Como a extensão já possui um script em segundo plano para preencher o pop-up com dados persistentes, achei que poderia criar oinput
no script em segundo plano e acionareste com.click()
quando o usuário clica no botão de upload de arquivo no pop-up.
Mas, mesmo que o evento click seja acionado para oinput
no script em segundo plano, a caixa de diálogo do navegador de arquivos não é aberta.
Eu acho que o motivo disso é que o Chrome não permite que a entrada do arquivo seja acionada programaticamente, a menos que seja por meio de uma ação do usuário, mas não tenho certeza. Foi assim que tentei;
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();
});
Eu sei que oclick
evento é acionado porquefileInput clicked
está logado. Mas, a caixa de diálogo do navegador de arquivos não abre.
Eu também tentei uma variação desse código usandochrome.extension.getBackgroundPage()
ligar diretamentefileInput.click()
. Novamente,click
evento foi disparado, mas a caixa de diálogo não foi aberta.
Minha pergunta é; existe uma maneira de permitir que o script em segundo plano acione o arquivoinput
abrir a caixa de diálogo do navegador de arquivos? Essa seria a melhor solução, porque permitiria que a extensão extraísse os dados do arquivo especificado, mesmo que o pop-up fosse fechado de alguma forma.
Caso contrário, existe uma maneira de evitar que o pop-up seja fechado quando a caixa de diálogo do navegador de arquivos for aberta? Pelo que encontrei, usando o ocultoinput
A tag deveria ser uma solução alternativa e funciona em alguns casos, mas não para todos os usuários.
Por exemplo, consegui fazer upload de arquivos sem que o pop-up fosse fechado no Chrome, Windows 7. Mas, no Chromium, Ubuntu 14.04, o pop-up fecha no instante em que a caixa de diálogo do navegador de arquivos é aberta.
Qualquer ajuda é apreciada.