Chcę, aby użytkownik mógł przesyłać pliki tekstowe jako dane wejściowe za pomocą wyskakującego okienka rozszerzenia browserAction
, ale napotkałem na mały problem.Plik wejściowy w wyskakującym rozszerzeniu Chrome
Używam ukrytego tagu input
, który uruchamiam z click()
, gdy użytkownik kliknie przycisk przesyłania pliku. Otworzy się okno przeglądarki plików i wszystko wydaje się działać dobrze, dopóki samo okno się nie zamknie. Z powodu "strony internetowej" zawierającej zamknięcie tagu input
, zdarzenie change
nigdy nie zostanie wywołane.
Ponieważ rozszerzenie ma już skrypt tła dla wypełniania okienko z trwałych danych, pomyślałem, że mogę stworzyć input
w skrypcie tła i wywołać że z .click()
gdy użytkownik kliknie przycisk Prześlij plik w popup .
Mimo że zdarzenie click wywoływane jest dla skryptu input
, okno dialogowe przeglądarki plików nie otwiera się.
Myślę, że powodem tego jest to, że Chrome nie zezwala na programowe uruchamianie danych wejściowych, chyba że dzieje się to za pośrednictwem działania użytkownika, ale nie jestem pewien. Tak próbowałem;
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();
});
wiem, że zdarzenie click
jest wyzwalany ponieważ fileInput clicked
jest rejestrowane. Ale okno dialogowe przeglądarki plików nie otwiera się.
Próbowałem również odmiany tego kodu przy użyciu chrome.extension.getBackgroundPage()
, aby bezpośrednio zadzwonić fileInput.click()
. Ponownie, zdarzenie click
zostało wywołane, ale okno dialogowe się nie otworzyło.
Moje pytanie brzmi; czy istnieje sposób, aby pozwolić skryptowi w tle wyzwolić plik input
, aby otworzyć okno dialogowe przeglądarki plików? Byłoby to najlepsze rozwiązanie, ponieważ pozwoliłoby rozszerzeniu wyodrębnić dane z określonego pliku, nawet jeśli popup zamknąłby się jakoś.
Jeśli nie, czy istnieje sposób na uniknięcie zamknięcia okna podręcznego po otwarciu okna przeglądarki plików? Z tego co odkryłem, używanie ukrytego tagu input
miało być obejściem i działa w niektórych przypadkach, ale nie dla wszystkich użytkowników.
Na przykład udało mi się przesłać pliki bez zamykania okienek wyskakujących w przeglądarce Chrome, Windows 7. Ale w Chromium, Ubuntu 14.04, okno podręczne zamyka się w momencie otwarcia okna dialogowego przeglądarki plików.
Każda pomoc jest doceniana.
Czy chciałbyś rozwiązać ten problem? Na jakiej jesteś platformie? – gkalpak
@ExpertSystem Nie, musiałem użyć okna wyskakującego do wprowadzenia pliku. Jestem w systemie Windows 7, wciąż szukając możliwego rozwiązania innego niż użycie okna podręcznego. – Rikonator
Poprzednio Twoje podejście do strony w tle było używane, ale nie w najnowszych wersjach Chrome.Ale dlaczego nie możesz skorzystać z wyskakującego okienka przeglądarki z rozszerzeniami? Wydaje się działać w systemie Windows. – gkalpak