2010-09-21 12 views
4

J'ai écrit un script pour tester pour le support SVG dans la balise IMG:Javascript: Comment puis-je retarder le retour d'une valeur pour img.complete

function SVGinIMG() { 
    var SVGdata = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D' 
    var i = document.createElement('img'); 
    i.setAttribute('src',SVGdata); 
    return i.complete; 
} 
window.onload = function() { 
    var hasSVG = SVGinIMG(); 
    alert(hasSVG); 
} 

Ce fait ce que je veux, sauf que quand je lance le script dans les navigateurs WebKit la propriété complète ne se déclenche pas la première fois que je charge la page; quand je rafraîchis la page, cela fonctionne comme il se doit. La fonction de retour est en cours d'exécution avant la fin du chargement de img; Quelle est la meilleure méthode pour retarder cela?

+0

Voici un script similaire au vôtre qui pourrait vous inspirer: http://my.opera.com/Fyrd/blog/svg-image-and-background-image-replacer –

+0

Ha! C'est ce que je regardais comme une source d'inspiration pour mon scénario, mais je le trouvais un peu trop compliqué. Mais merci pour le lien de toute façon, je vais l'étudier de plus près. – stopsatgreen

Répondre

5

Je compliquais un peu les choses; tout ce que je avais vraiment besoin était l'événement charge:

function SVGDetect() { 
    var testImg = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNzUiIGhlaWdodD0iMjc1Ij48L3N2Zz4%3D'; 
    var img = document.createElement('img') 
    img.setAttribute('src',testImg); 
    img.addEventListener('load',setCSS,true); 
} 

Cela va une autre fonction lorsque les charges d'image, ce qui est jamais dans le cas des navigateurs qui ne prennent pas en charge SVG en images.

+0

Pas si friands de cette version, car il a besoin d'un rappel plutôt que de simplement retourner vrai/faux. Merci pour la "question" d'origine en tout cas! Quel est l'avantage? – Julian