سؤال

هل هناك طريقة (يفضل استخدام JavaScript) لتحديد ما إذا كان عنوان URL مخصصًا لملف SWF أو JPG؟

الإجابة الواضحة هي التعرف على اسم الملف ".jpg" أو ".swf" ولكنني أتعامل مع الشعارات التي يتم تحديدها ديناميكيًا بواسطة الخادم وعادةً ما تحتوي على الكثير من المعلمات ولا تتضمن عمومًا امتدادًا.

لذلك أتساءل عما إذا كان بإمكاني تحميل الملف أولاً ثم قراءته بطريقة ما لتحديد ما إذا كان بتنسيق SWF أو JPG، ثم وضعه، لأن كود JavaScript الذي أحتاجه لعرض ملف JPG مقابل ملف SWF مختلف تمامًا.

شكرًا!

هل كانت مفيدة؟

المحلول

يمكنك استخدام جافا سكريبت لاكتشاف ما إذا كانت صورة عن طريق إنشاء علامة 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.

نصائح أخرى

وأود أن أتقدم الجواب Sijin بالقول:

وهناك طلب HEAD HTTP إلى رابط يمكن استخدامها لدراسة مورد التمثيل الصامت نوع. أنت لن تحتاج لتحميل بقية الملف بهذه الطريقة.

والتي لم تختبر تماما، basicly مجرد فكرة:

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

وأنا لست متأكد من أن من الإعداد المحدد لديك، ولكن يمكنك استخدام استجابة HTTP والتحقق من التمثيل الصامت من نوع لتحديد صورة مقابل فلاش؟

إذا لم يكن URL امتدادا ثم ليس هناك طريقة لمعرفة دون طلب الملف من الخادم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top