有没有办法(最好使用JavaScript)来确定URL是SWF还是JPG?

显而易见的答案是嗅探“.jpg”的文件名。或“.swf”或但我正在处理由服务器动态决定的横幅,通常有很多参数,通常不包括扩展名。

所以我想知道我是否可以首先加载文件,然后以某种方式读取它以确定它是SWF还是JPG,然后放置它,因为我需要显示JPG与SWF的JavaScript代码非常不同。

谢谢!

有帮助吗?

解决方案

您可以使用javascript通过创建动态img-tag来检测它是否是图像。

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的答案

对URL的HTTP HEAD请求可用于检查资源的mime类型。您 不需要以这种方式下载文件的其余部分。

完全未经测试,基本上只是一个想法:

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响应并检查mime类型以确定图像与闪存吗?

如果网址没有扩展名,那么在没有从服务器请求文件的情况下无法判断。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top