cómo detectar si una URL apunta a un SWF
-
06-07-2019 - |
Pregunta
¿Hay alguna manera (preferiblemente usando JavaScript) para determinar si una URL es para un SWF o un JPG?
La respuesta obvia es olfatear el nombre de archivo para " .jpg " o " .swf " pero estoy tratando con pancartas que el servidor decide dinámicamente y que generalmente tienen muchos parámetros y generalmente no incluyen una extensión.
así que me pregunto si podría cargar el archivo primero y luego leerlo de alguna manera para determinar si es SWF o JPG, y luego colocarlo, porque el código JavaScript que necesitaría para mostrar un JPG frente a un SWF es muy diferente.
¡Gracias!
Solución
Puede usar javascript para detectar si es una imagen creando una etiqueta img dinámica.
function isImage(url, callback) {
var img = document.createElement('img');
img.onload = function() {
callback(url);
}
img.src = url;
}
Y luego llamarlo con:
isImage('http://animals.nationalgeographic.com/staticfiles/NGS/Shared/StaticFiles/animals/images/primary/bald-eagle-head.jpg', function(url) { alert(url + ' is a image'); });
Actualizar Esta versión siempre ejecutará la devolución de llamada con un 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');
}
Ponga su lógica en la función isImageCallback.
Otros consejos
Extendería la respuesta de Sijin diciendo:
Se puede utilizar una solicitud HTTP HEAD a la url para examinar el tipo mime del recurso. usted no necesitará descargar el resto del archivo de esa manera.
Completamente no probado, básicamente solo una idea:
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;
}
No estoy seguro de la configuración exacta que tiene, pero ¿puede usar la respuesta HTTP y verificar el tipo MIME para determinar la imagen frente a flash?
Si la URL no tiene una extensión, no hay forma de saberlo sin solicitar el archivo al servidor.