como detectar se um URL aponta para um SWF
-
06-07-2019 - |
Pergunta
Existe uma maneira (de preferência usando JavaScript) para determinar se um URL é um SWF ou JPG?
A resposta óbvia é para farejar o nome do arquivo para ".jpg" ou ".swf", mas eu estou lidando com banners que são decididas de forma dinâmica pelo servidor e, geralmente, tem um monte de parâmetros e geralmente não incluem uma extensão .
assim que eu estou querendo saber se eu poderia carregar o arquivo primeiro e depois lê-lo de alguma forma para determinar se do SWF ou JPG, e depois colocá-lo, porque o código JavaScript que eu preciso para exibir um JPG vs um SWF é muito diferente.
Obrigado!
Solução
Você pode usar javascript para detectar se é uma imagem, criando uma img-tag dinâmica.
function isImage(url, callback) {
var img = document.createElement('img');
img.onload = function() {
callback(url);
}
img.src = url;
}
E, em seguida, chamá-lo com:
isImage('http://animals.nationalgeographic.com/staticfiles/NGS/Shared/StaticFiles/animals/images/primary/bald-eagle-head.jpg', function(url) { alert(url + ' is a image'); });
Atualizar Esta versão será sempre executar o retorno de chamada com um valor booleano.
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');
}
Coloque sua lógica na função isImageCallback.
Outras dicas
Gostaria de estender a resposta de Sijin dizendo:
solicitação de uma cabeça de HTTP para o URL pode ser usado para examinar mime-type do recurso. Vocês não precisará baixar o resto do arquivo dessa forma.
Completamente testado, basicamente apenas uma idéia:
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;
}
Eu não tenho certeza que o da configuração exata que você tem, mas você pode usar a resposta HTTP e verifique o mime-type para determinar imagem vs Flash?
Se a URL não tem uma extensão, então não há maneira de dizer sem solicitar o arquivo do servidor.