Question

Existe-t-il un moyen (utilisant de préférence JavaScript) de déterminer si une URL correspond à un fichier SWF ou à un fichier JPG?

La réponse évidente est de renifler le nom du fichier pour ".jpg". ou " .swf " mais je traite avec des bannières qui sont décidées dynamiquement par le serveur et qui ont généralement beaucoup de paramètres et qui n'incluent généralement pas une extension.

donc je me demande si je pourrais d'abord charger le fichier puis le lire d'une manière ou d'une autre pour déterminer s'il s'agit d'un fichier SWF ou JPG, puis le placer, car le code JavaScript qu'il me faudrait pour afficher un fichier JPG par rapport à un fichier SWF est très différent.

Merci!

Était-ce utile?

La solution

Vous pouvez utiliser javascript pour détecter s'il s'agit d'une image en créant un tag img dynamique.

function isImage(url, callback) {
    var img = document.createElement('img');
    img.onload = function() {
        callback(url);
    }
    img.src = url;
}

Puis appelez-le avec:

isImage('http://animals.nationalgeographic.com/staticfiles/NGS/Shared/StaticFiles/animals/images/primary/bald-eagle-head.jpg', function(url) { alert(url + ' is a image'); });

Mettre à jour Cette version exécutera toujours le rappel avec une valeur booléenne.

        function isImage(url) {
        var img = document.createElement('img');
        img.onload = function() {
            isImageCallback(url, true);
        }
        img.onerror = function() {
            isImageCallback(url, false);
        }
        img.src = url;
    }

    function isImageCallback(url, result) {
        if (result)
            alert(url + ' is an image');
        else
            alert(url + ' is not an image');
    }

Mettez votre logique dans la fonction isImageCallback.

Autres conseils

Je voudrais prolonger la réponse de Sijin en disant:

Une requête HTTP HEAD à l'URL peut être utilisée pour examiner le type mime de la ressource. Vous n'aurez pas besoin de télécharger le reste du fichier de cette façon.

Complètement non testé, fondamentalement juste une idée:

function isImage(url)
{
    var http = getHTTPObject();
    http.onreadystatechange = function ()
    {
        if (http.readyState == 4)
        {
            var contentType = http.getResponseHeader("Content Type");
            if (contentType == "image/gif" || contentType == "image/jpeg")
                return true;
            else
                return false;
        }
    }

    http.open("HEAD",url,true);
    http.send(null);
}


function getHTTPObject() 
{
    if (window.XMLHttpRequest)
    {
        return new XMLHttpRequest();
    }
    else 
    {
        if (window.ActiveXObject)
        {
            return new ActiveXObject("Microsoft.XMLHTTP"); 
        }
    }
    return false;
}

Je ne suis pas sûr de la configuration exacte que vous avez, mais pouvez-vous utiliser la réponse HTTP et vérifier le type MIME pour déterminer l'image par rapport au flash?

Si l'URL n'a pas d'extension, il n'y a aucun moyen de le savoir sans demander le fichier au serveur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top