Jaki jest najlepszy sposób otwierania okna pobierania w różnych przeglądarkach (załóżmy, że możemy ustawić dyspozycję zawartości: załącznik w nagłówkach) bez konieczności opuszczania bieżącej strony lub otwierania wyskakujących okienek, co nie działa dobrze w przeglądarce Internet Explorer (IE ) 6.
javascript
mkoryak
źródło
źródło
Content-Type: application/octet-stream
iContent-Disposition: attachment
.Ten javascript jest fajny, że nie otwiera nowego okna ani karty.
źródło
Zawsze dodaję target = "_ blank" do linku pobierania. Otworzy się nowe okno, ale gdy tylko użytkownik kliknie przycisk Zapisz, nowe okno zostanie zamknięte.
źródło
Umieść to w sekcji nagłówka HTML, ustawiając
url
zmienną na adres URL pliku do pobrania:Następnie umieść to w treści, która rozpocznie pobieranie automatycznie po 5 sekundach:
( Stąd .)
źródło
Wiem, że zadano pytanie,
7 years and 9 months ago
ale wiele opublikowanych rozwiązań wydaje się nie działać, na przykład używanie<iframe>
tylko działa z,FireFox
a nie działaChrome
.Najlepsze rozwiązanie:
Najlepszym działającym rozwiązaniem do otwierania wyskakującego okienka pobierania pliku
JavaScript
jest użycieHTML
elementu link, bez konieczności dołączania elementu link do elementu,document.body
jak podano w innych odpowiedziach.Możesz użyć następującej funkcji:
W mojej aplikacji używam go w ten sposób:
Działające demo:
Pokaż fragment kodu
Uwaga:
link.download
atrybutu, aby przeglądarka nie otworzyła pliku w nowej karcie i uruchomiła wyskakujące okienko pobierania.źródło
link
kliknięciu i ukrycie jej po pewnym czasie za pomocą tego kodu:link.onclick = function() { document.body.innerText = "The file is being downloaded ..."; setTimeout(function() { document.body.innerText = ""; }, 2000); }
możesz zobaczyć, jak działa w tym skrzypce , ale pamiętaj, że nie jest to zalecany sposób robienia tego, byłoby lepiej, gdybyśmy używaliAjax
.iframe
zobacz tę odpowiedź .Szukałem dobrego sposobu na użycie javascript do zainicjowania pobierania pliku, tak jak sugeruje to pytanie. Jednak te odpowiedzi nie były pomocne. Następnie przeprowadziłem kilka testów xbrowser i odkryłem, że iframe działa najlepiej we wszystkich nowoczesnych przeglądarkach IE> 8.
class="screenReaderText"
to moja klasa do stylizowania zawartości, która jest obecna, ale nie można jej wyświetlić.css:
tak samo jak .visuallyHidden w html5boilerplate
Wolę to od metody window.open w javascript, ponieważ jeśli łącze jest zepsute, metoda iframe po prostu nie robi nic, w przeciwieństwie do przekierowywania na pustą stronę z informacją, że nie można otworzyć pliku.
źródło
Korzystanie z interfejsu API pliku HTML5 Blob Object-URL File:
źródło
URL.revokeObjectURL(url)
, gdy plik nie jest już potrzebny do zwolnienia pamięciModyfikacja lokalizacji okna może spowodować pewien problem, szczególnie w przypadku trwałego połączenia, takiego jak websocket. Dlatego zawsze uciekam się do starego, dobrego rozwiązania iframe.
HTML
Javascript
źródło
Jeśli łącze prowadzi do prawidłowego adresu URL pliku, wystarczy przypisać właściwość window.location.href.
Jednak czasami łącze jest nieprawidłowe i wymagany jest element iFrame.
Wykonaj swoje normalne event.preventDefault, aby zapobiec otwarciu okna, a jeśli używasz jQuery, zadziała:
źródło
Po godzinach prób narodziła się funkcja :) Miałem scenariusz, w którym musiałem wyświetlić loader w czasie, gdy plik jest przygotowywany do pobrania:
Działa w Chrome, Safari i Firefox
źródło
Co powiesz na:
W ten sposób działa we wszystkich przeglądarkach (tak mi się wydaje) i pozwala umieścić komunikat typu: „Jeśli pobieranie nie rozpocznie się za pięć sekund, kliknij tutaj”.
Jeśli potrzebujesz javascript ... cóż ...
pozdrowienia
źródło
W tym celu może działać mała / ukryta ramka iframe.
Dzięki temu nie musisz się martwić o zamknięcie wyskakującego okienka.
źródło