Het probleem was al in een ander topic aan de orde gekomen, maar laten we de dingen helder houden en het dus apart opvoeren.
Onderstaand script zit in een pagina om een foto-album weer te geven. Het foto-album bestaat uit een aantal dirs met naam gall.naam en in iedere directory staan dan de thumbs en grote foto's. Die directory's zijn strict genomen niet nodig, maar da's voor m'n eigen gemak.
Eerst het script, dan leg ik 't verder uit:
Een gallery kan max. 9 pagina's hebben op de betreffende website, dus om te kijken hoeveel pagina's een bepaalde gallery heeft, laad ik alle eerste posities in van 1 t/m 9. Met onderstaand script (van internet gehaald en slechts een heel kleine beetje aangepast) doe ik een pre-load.
Van alle pagina's waar de eerste positie een .onload geeft, wordt het pag.nr. weergegeven. De rest wordt weggelaten. (Ga hier niet teveel op in, dit is het probleem niet. 't Werkt en misschien leg ik 't wat krom uit
).
De preload is afgelopen als er net zoveel images zijn geprocessed als er zijn opgegeven om te preloaden. Met .onerror, .onload, en .onabort wordt de ben-ik-al-klaar functie getriggered, waarbij slechts bij .onload een teller nLoaded wordt opgehoogd. Deze nLoaded wordt aan de callback functie meegegeven en in m'n verdere script geeft dat dus het aantal pagina's.
Ik heb overigens voor de DOM methode gekozen en niet voor new Image(), vanwege wat hier staat.
In FireFox, Opera en MSIE werkt dit, maar in Safari wordt 't script niet afgerond. Het blijkt te liggen aan het feit dat de .onerror functie niet wordt afgewikkeld.
Kennelijk triggert Safari het .onerror event niet, ondanks dat het volgens deze pagina wel zou moeten werken.
Heeft iemand hier ervaring mee?
Of ziet iemand hoe ik het wellicht met een scriptwijziging op kan lossen?
Onderstaand script zit in een pagina om een foto-album weer te geven. Het foto-album bestaat uit een aantal dirs met naam gall.naam en in iedere directory staan dan de thumbs en grote foto's. Die directory's zijn strict genomen niet nodig, maar da's voor m'n eigen gemak.
Eerst het script, dan leg ik 't verder uit:
code:
Ik heb dus de directory's met een aantal systematisch genummerde thumbs erin. De filenaam zit als volgt in elkaar: [pag.nr]_[pos.nr]_[gall.naam].jpg.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| function ImagePreloader(images, callback) {
this.callback = callback; // Naar deze gaan als je klaar bent.
this.nLoaded = 0;
this.nProcessed = 0;
this.aImages = new Array();
this.nImages=images.length; // De functie krijgt een array 'images' om in te laden
for ( var i = 0; i < images.length; i++ ) { this.preload(images[i]); }
}
// Ben ik al klaar?
ImagePreloader.prototype.onComplete = function() {
this.nProcessed++;
if ( this.nProcessed == this.nImages ) { this.callback(this.aImages,this.nLoaded); }
}
ImagePreloader.prototype.onload = function() {
this.oImagePreloader.nLoaded++; // als 't laden gelukt is, deze ophogen
this.oImagePreloader.onComplete();
}
ImagePreloader.prototype.onerror = function() { this.oImagePreloader.onComplete(); }
ImagePreloader.prototype.onabort = function() { this.oImagePreloader.onComplete(); }
ImagePreloader.prototype.preload = function(image) {
var oImage = document.createElement("img"); // met new Image() werkt 't zeker niet!
this.aImages.push(oImage);
oImage.onload = ImagePreloader.prototype.onload;
oImage.onerror = ImagePreloader.prototype.onerror;
oImage.onabort = ImagePreloader.prototype.onabort;
oImage.oImagePreloader = this;
oImage.src = image;
} |
Een gallery kan max. 9 pagina's hebben op de betreffende website, dus om te kijken hoeveel pagina's een bepaalde gallery heeft, laad ik alle eerste posities in van 1 t/m 9. Met onderstaand script (van internet gehaald en slechts een heel kleine beetje aangepast) doe ik een pre-load.
Van alle pagina's waar de eerste positie een .onload geeft, wordt het pag.nr. weergegeven. De rest wordt weggelaten. (Ga hier niet teveel op in, dit is het probleem niet. 't Werkt en misschien leg ik 't wat krom uit
De preload is afgelopen als er net zoveel images zijn geprocessed als er zijn opgegeven om te preloaden. Met .onerror, .onload, en .onabort wordt de ben-ik-al-klaar functie getriggered, waarbij slechts bij .onload een teller nLoaded wordt opgehoogd. Deze nLoaded wordt aan de callback functie meegegeven en in m'n verdere script geeft dat dus het aantal pagina's.
Ik heb overigens voor de DOM methode gekozen en niet voor new Image(), vanwege wat hier staat.
In FireFox, Opera en MSIE werkt dit, maar in Safari wordt 't script niet afgerond. Het blijkt te liggen aan het feit dat de .onerror functie niet wordt afgewikkeld.
Kennelijk triggert Safari het .onerror event niet, ondanks dat het volgens deze pagina wel zou moeten werken.
Heeft iemand hier ervaring mee?
Of ziet iemand hoe ik het wellicht met een scriptwijziging op kan lossen?
[Hier had mijn handtekening kunnen staan]