jQuerowy beforeunload() odpala się przy pobieraniu plików - jak to rozpoznać?

0

Zrobiłem taki myk, że w miejscu głównej zawartości strony na początku wczytywania na pierwszym planie mam 100%owego diva z komunikatem "wczytywanie", który chowam w $(document).ready(function() ... - w ten sposób cała zawartość strony pokazuje się użytkownikowi w jednym momencie. Kiedy ktoś kliknie link lub jest gdzieś przekierowany przez js, lub wyśle formularz, czyli kiedy odpali się zdarzenie $(window).on('beforeunload', function() ... znowu pokazuję komunikat dzięki czemu mam płynne przejście kiedy zmienia się adres strony. Problem występuje kiedy ktoś zostanie wysłany do skryptu do pobrania pliku - skrypt wysyła tylko nagłówki z plikiem, można go pobrać lub anulować i strona się nie zmienia, ale niestety komunikat się pokazuje i już zostaje. Ma ktoś pomysł na rozwiązanie?

0

Moze po prostu dodaj do kodu ponownie wywołującego loader jakiś warunek a do skryptu pobierania kod, który sprawi, że warunek będzie fałszywy.

0

Może atrybut download w linku coś pomoże? Wtedy przeglądarka z góry wie, że to trzeba pobrać (w przypadku zwykłego linku - musi dowiedzieć się tego od serwera), więc być może tego komunikatu nie będzie.

Pamiętaj tylko, że wsparcie w IE nie istnieje ;) http://caniuse.com/#feat=download

0
Maciej Cąderek napisał(a):

Moze po prostu dodaj do kodu ponownie wywołującego loader jakiś warunek a do skryptu pobierania kod, który sprawi, że warunek będzie fałszywy.

Hmm... mam <a href="download.php?id=123">... po kliknięciu którego zaczyna się pobieranie. Czasem przechodzę do linku javascriptem (location=...) i wtedy pojawia się okienko pobierania. Jest to możliwe, żeby do skryptu pobierającego przekazać dane od skryptu wywoływanego? Przychodzi mi do głowy jeszcze takie rozwiązanie żeby sprawdzać wyrażeniem regularnym czy link do którego idziemy posiada w sobie ciąg "download.php", i wtedy ewentualnie dodać warunek, albo od razu schować diva jeżeli click() wywoła się po beforeunload(), ale to sobie sprawdzę w poniedziałek. Nie wiem jeszcze czy takie sprawdzanie wyrażaniem regularnym każdego linku na stronie nie będzie obciążające.

A znacie sposób, żeby sprawdzić, kiedy użytkownik kliknął "Zapisz", "Anuluj", albo zamknął okienko pobierania pliku? Jeżeli jest taki sposób to mógłbym wtedy chować tego diva.

dzek69 napisał(a):

Może atrybut download w linku coś pomoże? Wtedy przeglądarka z góry wie, że to trzeba pobrać (w przypadku zwykłego linku - musi dowiedzieć się tego od serwera), więc być może tego komunikatu nie będzie.

Pamiętaj tylko, że wsparcie w IE nie istnieje ;) http://caniuse.com/#feat=download

Niestety musi to działać na IE.

0

Nie bardzo rozumiem pierwszą część posta.

Jest to możliwe, żeby do skryptu pobierającego przekazać dane od skryptu wywoływanego?

Co dokładnie masz na myśli?

Nie wiem jeszcze czy takie sprawdzanie wyrażaniem regularnym każdego linku na stronie nie będzie obciążające.

Przecież sprawdzać będziesz chyba tylko ten kliknięty i tylko podczas kliknięcia? Poza tym do sprawdzenia czy string zawiera, bądź kończy się określonym ciągiem - nie potrzebujesz do tego wyrażeń regularnych.

Do głowy przychodzą mi jeszcze opcje z iframe (nie polecam, w zasadzie nie możesz usunąć tego iframa, bo jak usuniesz to niepotwierdzone pobieranie zniknie, a z kolei trzymanie go w tle nie brzmi mi na wydajną opcję) i otworzeniem pobierania w nowej karcie po prostu (tu ew. zadziała agresywny popup blocker, ale nie powinien, jeżeli to będize zwykłe target=_blank), na necie być może znajdziesz jeszcze inne rozwiązania: https://www.google.pl/search?q=onbeforeunload+download

0

Dzięki wielkie!

target="_blank"

załatwiło sprawę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1