2010-03-08 23 views
6

Mam wiele skryptów śledzenia i usług internetowych zainstalowanych na mojej stronie internetowej i zauważyłem, że gdy jedna z tych usług ulegnie awarii, nadal próbuje wywołać zewnętrzny plik javascript hostowany na innym serwerze. W przeglądarkach Firefox, Chrome i innych nowych przeglądarkach nie występują żadne problemy z awarią jednej z usług. Jednak w IE7 i IE8 moje strony nie ładują się całkowicie i nie kończą się, zanim wszystko zostanie wyświetlone. Czy jest jakiś sposób na dodanie limitu czasu dla tych wywołań javascript, aby uniemożliwić im złamanie moich stron, gdy zejdą na dół?External JavaScript Timeout

Odpowiedz

5

Można załadować je dynamicznie po stronie obciążenia z JS. Jeśli pliki JS znajdują się na innym serwerze, przeglądarka nadal będzie wyświetlać wskaźnik "zajęty przeglądarka", ale załaduje się strona oryginalna.

Jeśli możesz pobrać JS z własnej witryny, możesz załadować go za pomocą XMLHttpRequest po wczytaniu strony (lub z pomocnikami Twojej ulubionej biblioteki JS, np. JQuery's $.ajax(...)), a następnie przeanalizować. W ten sposób samo pobieranie nie pokaże wskaźnika zajętości przeglądarki.

Aby pobrać JS z własnej witryny, możesz pobrać go ze swojego dostawcy śledzenia (który nie będzie oficjalnie obsługiwany, ale zazwyczaj działa) - pamiętaj, by od nowa pobierać nowe wersje - lub możesz utworzyć usługę "przekazywania" w Twojej witrynie, która pobiera ją od dostawcy usługi śledzenia i buforuje ją lokalnie przez jakiś czas. W ten sposób Twój JS nie będzie zagrożony stagnacją.

Steve Souders ma więcej informacji o deferred loading of scripts and browser-busy indicators.

+0

+1, co jest dobrym linkiem. –

2

spróbuj dodać defer="defer"

Atrybut Defer daje wskazówkę do przeglądarkę, że skrypt nie tworzyć żadnych treści więc przeglądarka może opcjonalnie odroczyć interpretacji skryptu . Może to poprawić wydajność , opóźniając wykonywanie skryptów do po przetworzeniu zawartości treści i renderowaniu .

Edit
To uniemożliwi te skrypty z systemem aż załadowaniu strony:

function loadjs(filename) { 
    var fileref=document.createElement('script'); 
    fileref.setAttribute("type","text/javascript"); 
    fileref.setAttribute("src", filename); 
} 

window.onLoad = function() { 
    loadJs("http://path.to.js"); 
    loadJs("http://path.to2.js"); 
    ... 
} 
+0

Nieobsługiwany we wszystkich przeglądarkach :( – orip

+0

Yah Nie sądzę, że to działa.Myślę, że prawdziwym problemem jest to, że IE próbuje połączyć się z zewnętrznym plikiem JS, a domyślny limit czasu jest ustawiony zbyt wysoko. Gdzie jest firefox i inne przeglądarki wydaje się wiedzieć szybko, że plik nie odpowiada i przejść odpowiednio.Czy zastanawiam się, czy jest jakiś sposób, aby temu zapobiec .... – mike

+0

Można ładować zewnętrznych plików javascript za pomocą javascript, a nie html. '