Как определить, указывает ли URL на SWF

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

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

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

Спасибо!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
898
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

возможно. Это чисто настройка JavaScript / flash, поэтому у меня не будет доступа ни к каким серверным скриптам для выполнения HTTP-запроса. Если это возможно через JS, хотя это может быть ответом.

nerdabilly 05.11.2008 22:40

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

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

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

Ответ принят как подходящий

Вы можете использовать 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.

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

nerdabilly 05.11.2008 22:36

Я тестировал его в IE7, FF3 и Chrome. Обратный вызов не вызывается для swf.

loraderon 05.11.2008 22:50

Ок, отлично! Я пробовал это, и мне это нравится. только еще один вопрос: если я попытаюсь загрузить SWF, поскольку обратный вызов никогда не срабатывает, мне нужно разместить WSF по-другому. приведет ли это к 2 загрузкам SWF? или как мне обрабатывать SWF, если isImage не является изображением?

nerdabilly 06.11.2008 00:03

Да, было бы. Однако файл swf, вероятно, кэшируется браузером после первой попытки его загрузки. Я обновил ответ другой версией.

loraderon 06.11.2008 13:35

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

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

Мне это нравится, я думал о том, чтобы сделать что-то подобное. Один вопрос: если я сделаю запрос на определение типа изображения, а затем определю, что это изображение, так что загрузите его, приведет ли это к загрузке одного и того же изображения дважды?

nerdabilly 05.11.2008 22:50

Нет, при запросе с использованием «HEAD» извлекаются только заголовки HTTP.

FlySwat 05.11.2008 22:51

Другие вопросы по теме