2012-11-13 16 views
11

Pracowałem z interfejsem API historii podczas ładowania stron asynchronicznie za pośrednictwem javascript/jquery. Zastanawiam się, jak można powiedzieć przeglądarce, że strona ładuje się, aby przeglądarka mogła wyświetlić ładujący się obraz (np. Wirujące koło w firefoxie).Historia Api: Jak powiedzieć przeglądarce, że strona ładuje się?

Edit:

Aby być bardziej konkretne:

Gdybym załadować stronę na mojej stronie internetowej, zmiany zawartości, nowa zawartość jest widoczna, ale Firefox nie pokazują kołowrotek jako sygnał , że strona ładuje się.

Jeśli otworzę zdjęcie z osi czasu na Facebooku, obraz się ładuje, zmienia się adres URL, a Firefox pokazuje obracające się koło, aby pokazać, że obraz ładuje się w tle.

Chcę też tego kołowrotka!

Odpowiedz

1

Cóż, żądanie asynchroniczne wie, że coś jest ładowane. Będziesz musiał sam propagować wydarzenie w innym miejscu. Na przykład, za pomocą haka beforeSend:

$.ajax('/your_stuff', 
     beforeSend: function() { 
     $(document).trigger('loading'); 
     } 
     ....) 

a następnie:

$(document).on('loading', function() { alert("request is loading");} 

Radziłbym ci wyzwolić zdarzenie jednocześnie zaktualizowanie URL z historią API.

+1

Ten skrypt wyświetla okno alertu. Ale chcę, żeby sama przeglądarka pokazywała, że ​​strona ładuje się. – Olli

+0

sformułowałeś nasze pytanie nieco nie tak. Chcesz wiedzieć, jak możesz zaktualizować favicon, aby symulować status "ładowania" podczas wykonywania zapytań ajaxowych, o ile dobrze zrozumiałem. – ChuckE

+0

https://gist.github.com/428626 To może ci pomóc. Teraz wystarczy wiedzieć, gdzie jest przechowywana ikona "ładowanie", która może być inna niż przeglądarka do przeglądarki.Tak więc, albo otrzymasz jeden do pracy wszędzie w twoim przypadku, albo znajdziesz lokalizację przez przeglądarkę i "sniff" przeglądarkę przed aktualizacją. – ChuckE

-1

Przypuszczam ze znaczników używasz jQuery dla AJAX. Można użyć globalnych teleskopowe AJAX jak $.ajaxStart() i $.ajaxComplete() Będą strzelać niezależnie od tego, gdzie wywołać metodę ajax w kodzie

$('#myLoadingDiv').ajaxStart(toggleLoading).ajaxComplete(toggleLoading); 

function toggleLoading(){ 
    $(this).toggle(); 
} 

odniesienia API http://api.jquery.com/ajaxStart/

myślę ze swojego zapytania brzmieniem chcesz, aby móc kontrolować ładowanie obrazu na samej karcie przeglądarki. Nie możesz tego kontrolować. Korzystanie z własnego obrazu lub tekstu w obrębie strony jest bardziej widoczny dla użytkownika

EDIT Musisz podać własną animację ładowania w elemencie z id=myLoadingDiv dla tego kodu do pracy

+0

Ten skrypt wyświetla okno alertu. Ale chcę, żeby sama przeglądarka pokazywała, że ​​strona ładuje się. – Olli

+0

proszę wyjaśnić, co masz na myśli mówiąc "sama przeglądarka pokazuje, że strona ładuje się". Również nie jest okienkiem alarmowym ... może być dowolnym html umieszczonym w dowolnym miejscu na stronie, które chcesz i możesz go animować w dowolny sposób. – charlietfl

+0

Och, przepraszam, ten komentarz odnosi się do innych odpowiedzi - nie do twojego. Przetestowałem twój skrypt, ale "kołowrotek" w firefoxie nie pojawia się. Zmieniłem moje pytanie z dalszym wyjaśnieniem. – Olli

7

Znalazłem odpowiedź na te pytania:

How to have AJAX trigger the browser's loading

var i = $('<iframe>'); 
console.log(i); 
i.appendTo('body'); 
function start() { 
    i[0].contentDocument.open(); 
    setTimeout(function() { 
     stop(); 
    }, 1000); 
} 
function stop() { 
    i[0].contentDocument.close(); 
    setTimeout(function() { 
     start(); 
    }, 1000); 
} 

start(); 

Źródło: jsFiddle

Skrypt tworzy element iframe, który jest wyzwalany przez ajax.start & ajax.stop-event.

+1

Nie działa w przeglądarce Chrome :-( – Frodik

Powiązane problemy