Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [js] Preloading. Jak Użyć Funkcji Try...catch?
Forum PHP.pl > Forum > Przedszkole
gilbo
Witam, mam problem.

Mianowicie potrzebuję znaleźć sposób, aby przeglądarka nie pobierała nic wcześniej zanim nie pobierze skryptu.
I nie chodzi mi o wstawienie go do head:)

Mniej więcej coś takiego jak preloading obrazków.

Pozdrawiam proszę o pomoc!

AKTUALNY PROBLEM NA DOLE TEMATU!
franki01
Ale jaki skrypt ma najpierw pobrac? JS? I moze jakis przyklad bo niekoniecznie to jest logiczne biggrin.gif
gilbo
Hehe no tak JS.

Chodzi oto, że pobrałem sobie skrypt galerii, a dokładnie powiększania miniaturek (http://huddletogether.com/projects/lightbox/). No i niestety tam jest tak, że ustawia się link np. <a href="obraz.jpg"><img src="obraz-mini.jpg"></a> i to się tak ładnie ładuje. Niestety, jeżeli jest wolne łącze to niektore obrazki już się załadują i ktoś może kliknąć, a jeżeli nie ma skryptu załadowanego do końca to wyświetla się tylko obrazek bo taki jest link. Niestety ten skrypt waży aż 11kb, dlatego chciałbym coś wymyślić, żeby zmusić do pobrania najpierw skrytu potem galerii.

Pozdrawiam
Gość_biopaliwo_*
A nie możesz zablokować strony do czasu załadowania skrytpu?
W tle uruchomić, np. co sekundę, próbę wywołania funkcji z ładowanego skryptu -
ujątą w try...catch. Jeśli wygeneruje wyjątek - nie załadował się, trzeba powtórzyć,
jeśli nie - można odblokować stronę.
gilbo
Ocoś takiego mi chodzi, jednakże jestem zielony z js więc może jakiś link do referencji tej funkcji? I jak zablokować ładowanie się strony? Będę wdzięczny za pomoc!

Pozdrawiam i dziękuję za zainteresowanie i pomoc!
biopaliwo
zablokować - np. przesłonić divem z odpowidnim z-index i informacją Trwa ładowanie ...

sprawdzać czy skrypt jest załadawony - wywoływać co jakiś czas blok try { ... } catch,
w którym jest odwołanie do nazwy zmiennej lub funkcji z zakresu nazw ładowanego skryptu

dopóki skrypt nie jest załadowany, takie odwałanie będzie generować wyjątek, który będziesz
przechwytywał i ponownie uruchamiał blok try {} catch, a jak nie wygeneruje wyjątku - to będziesz mógł
odblokować stronę

mniej więcej coś takiego:
setTimeout('f()', 1000)
...
function f() {
try {
var x = zmienna z ładowanego skryptu
} catch(e) {
setTimeout('f()', 1000)
}
}
gilbo
Super wielkie dzięki za odpowiedź, ale jeszcze proszę o jedno rozwiązanie. Mianowicie szukałem w internecie a nic nie mogę zrozumieć z tego co znalazłem (nie potrafię przerobić przykładu)...

Mianowicie chodzi mo oto, że jak mam coś takiego, jak napisałeś to gdzie mam potem dać instrukcję do "odblokowania" strony?

Proszę o pomoc!
kossa
wszystko zależy jak napiszesz swój skrypt i jak będzie funkcjonował ale możesz odpalać funkcję np. w znaczniku body onLoad...

Łukasz
biopaliwo
Odblokowanie strony powinno nastąpić jeśli blok try{}catch przejdzie bez wyjątku.
try {
...
}catch(...){
...
// po przechwyceniu wyjątku musisz jeszcze wymusić zakończenie funkcji poprzez "return"
}
// tutaj dajesz kod do odblokowania,

a kod blokujący powinieneś umieścić w obsłudze zdarzenia onload strony
(o ile chodzi o całą stronę, a nie np. o pojedynczego diva)
gilbo
Zrobiłem tak:

Aby "zablokować" stronę:
Kod
<div id="galleryPreloadDiv">Ładowanie strony...</div>

W cssie ma wymiary 100x100%; position:absolute; top i left:0; i z-index:1000; No i zakrywa pięknie całą stronę.

Na końcu potrzebnego mi skryptu dodałem zmienna:
Kod
var testVar = 'test';


no i dodałem taki skrypt do stronicy, aby przechwytywał te błędy:
Kod
setTimeout('checkLoad()', 500);
function checkLoad() {
try {
x = testVar;
}
catch(e) {
setTimeout('checkLoad()', 500);
}
}
document.getElementById('galleryPreloadDiv').style.visibility = 'hidden';


Niestety nie działa (cały czas widzę zasłaniającego stronę DIV'a). Zapewne źle zrobiłem ten kod, ale jak już mówiłem nie umiem tego robić... Czy moglibyście wskazać mi tu błąd ew. przerobić na szybko ten kodzik?

Pozdrawiam
biopaliwo
strona
CODE

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>.:[Title]:.</title>
<script src="trycatch.js" type="text/javascript" language="javascript">

</script>
</head>

<body>
<div id="galleryPreloadDiv">Ładowanie strony...</div>
</body>
</html>



skrypt
CODE
var z = null;

function f() {
try {
var x = z;
} catch(e) {
setTimeout('f()', 1000);
return;
}
document.getElementById('galleryPreloadDiv').style.visibility = 'hidden';
};

window.onload = function() {
setTimeout('f()', 1000);
}


jak wyrzucisz var z = null; - nie zniknie
jak zostawisz - zniknie po 1 sekundzie
gilbo
Wielkie dzięki!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.