Domanda

Esiste un modo (preferibilmente utilizzando JavaScript) per determinare se un URL appartiene a un file SWF o JPG?

La risposta ovvia è annusare il nome del file per " .jpg " o " .swf " ma ho a che fare con banner decisi dinamicamente dal server e di solito hanno molti parametri e generalmente non includono un'estensione.

quindi mi chiedo se potrei prima caricare il file e poi leggerlo in qualche modo per determinare se è SWF o JPG, quindi posizionarlo, perché il codice JavaScript di cui avrei bisogno per visualizzare un JPG contro un SWF è molto diverso.

Grazie!

È stato utile?

Soluzione

È possibile utilizzare JavaScript per rilevare se si tratta di un'immagine creando un tag img dinamico.

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

E poi chiamandolo con:

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

Aggiorna Questa versione eseguirà sempre il callback con un valore booleano.

        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');
    }

Metti la tua logica nella funzione isImageCallback.

Altri suggerimenti

Estenderei la risposta di Sijin dicendo:

Una richiesta HTTP HEAD all'URL può essere utilizzata per esaminare il tipo mime della risorsa. tu non sarà necessario scaricare il resto del file in questo modo.

Completamente non testato, sostanzialmente solo un'idea:

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;
}

Non sono sicuro della configurazione esatta che hai, ma puoi usare la risposta HTTP e controllare il tipo mime per determinare l'immagine rispetto al flash?

Se l'URL non ha un'estensione, non è possibile dirlo senza richiedere il file dal server.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top