Pergunta

Existe uma maneira (de preferência usando JavaScript) para determinar se um URL é um SWF ou JPG?

A resposta óbvia é para farejar o nome do arquivo para ".jpg" ou ".swf", mas eu estou lidando com banners que são decididas de forma dinâmica pelo servidor e, geralmente, tem um monte de parâmetros e geralmente não incluem uma extensão .

assim que eu estou querendo saber se eu poderia carregar o arquivo primeiro e depois lê-lo de alguma forma para determinar se do SWF ou JPG, e depois colocá-lo, porque o código JavaScript que eu preciso para exibir um JPG vs um SWF é muito diferente.

Obrigado!

Foi útil?

Solução

Você pode usar javascript para detectar se é uma imagem, criando uma img-tag dinâmica.

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

E, em seguida, chamá-lo com:

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

Atualizar Esta versão será sempre executar o retorno de chamada com um valor 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');
    }

Coloque sua lógica na função isImageCallback.

Outras dicas

Gostaria de estender a resposta de Sijin dizendo:

solicitação de uma cabeça de HTTP para o URL pode ser usado para examinar mime-type do recurso. Vocês não precisará baixar o resto do arquivo dessa forma.

Completamente testado, basicamente apenas uma idéia:

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

Eu não tenho certeza que o da configuração exata que você tem, mas você pode usar a resposta HTTP e verifique o mime-type para determinar imagem vs Flash?

Se a URL não tem uma extensão, então não há maneira de dizer sem solicitar o arquivo do servidor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top