2

URL が SWF か JPG かを判断する方法 (できれば JavaScript を使用) はありますか?

明らかな答えは、「.jpg」または「.swf」のファイル名をスニッフィングすることですが、サーバーによって動的に決定され、通常は多くのパラメーターがあり、通常は拡張子が含まれていないバナーを扱っています。

JPG と SWF を表示するために必要な JavaScript コードは非常に異なるため、最初にファイルをロードし、それを何らかの方法で読み取って SWF か JPG かを判断し、配置できるかどうか疑問に思っています。

ありがとう!

4

5 に答える 5

3

シジンの答えを次のように拡張します。

URL への HTTP HEAD 要求を使用して、リソースの MIME タイプを調べることができます。この方法で残りのファイルをダウンロードする必要はありません。

于 2008-11-05T19:26:55.093 に答える
3

動的な img タグを作成することにより、javascript を使用して画像であるかどうかを検出できます。

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 関数に入れます。

于 2008-11-05T19:27:23.470 に答える
3

完全にテストされていない、基本的に単なるアイデア:

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;
}
于 2008-11-05T19:46:44.257 に答える
2

正確な設定はわかりませんが、HTTP 応答を使用して MIME タイプをチェックし、イメージとフラッシュを判断できますか?

于 2008-11-05T19:14:04.293 に答える
0

URL に拡張子がない場合は、サーバーにファイルを要求しないと判断できません。

于 2008-11-05T19:26:36.123 に答える