как определить, указывает ли URL на SWF - PullRequest
2 голосов
/ 05 ноября 2008

Есть ли способ (желательно с использованием JavaScript), чтобы определить, является ли URL-адрес SWF или JPG?

Очевидный ответ - вывести имя файла для «.jpg» или «.swf», но я имею дело с баннерами, которые динамически определяются сервером и обычно имеют много параметров и, как правило, не включают расширение. ,

поэтому мне интересно, могу ли я сначала загрузить файл, а затем как-то прочитать его, чтобы определить, является ли он SWF или JPG, а затем поместить его, потому что код JavaScript, который мне нужен для отображения JPG против SWF, разные.

Спасибо!

Ответы [ 5 ]

3 голосов
/ 05 ноября 2008

Полностью не проверено, в основном просто идея:

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;
}
3 голосов
/ 05 ноября 2008

Вы можете использовать JavaScript, чтобы определить, является ли это изображение, создав динамический тег img.

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

А затем вызывать его с:

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

Обновление Эта версия всегда будет выполнять обратный вызов с логическим значением.

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

Поместите вашу логику в функцию isImageCallback.

3 голосов
/ 05 ноября 2008

Я бы расширил ответ Сиджина, сказав:

HTTP-запрос HEAD к URL может использоваться для проверки mime-типа ресурса. Вы нет необходимости загружать оставшуюся часть файла таким образом.

2 голосов
/ 05 ноября 2008

Я не уверен в точной настройке, которую вы используете, но можете ли вы использовать HTTP-ответ и проверить mime-тип, чтобы определить образ в сравнении с flash?

0 голосов
/ 05 ноября 2008

Если URL не имеет расширения, то невозможно узнать, не запросив файл с сервера.

...