whatwg - JavaScript/jQuery ver los enlaces rotos
whatwg español (5)
Como Sebastian dice que no es posible debido a la misma política de origen. Si el sitio se puede publicar (temporalmente) en un dominio público, podría usar uno de los servicios de corrector de enlaces. Estoy detrás de checkerr.org
Desarrollé un pequeño programa Javascript / jQuery para acceder a una colección de archivos pdf para uso interno. Y quería que se destacara el div de información de un archivo pdf si el archivo realmente existe.
¿Hay alguna forma de determinar mediante programación si un enlace a un archivo está roto? ¿Si es así, cómo?
Cualquier guía o sugerencia es apropiada.
El problema es que JavaScript tiene la misma política de origen, por lo que no puedes tomar contenido de otro dominio. Esto no cambiará al subirle la votación (preguntándose sobre los 17 votos). Creo que lo necesitas para enlaces externos, por lo que es imposible solo con .js ...
Puedes $.ajax
a eso. Si el archivo no existe, obtendrá el error 404 y luego podrá hacer lo que necesite (UI-wise) en la devolución de llamada por error. Depende de usted cómo desencadenar la solicitud (¿temporizador?) Por supuesto, si también tiene la capacidad de hacer una codificación del lado del servidor, puede hacer una sola solicitud de AJAX: escanear el directorio y luego devolver los resultados como, por ejemplo, JSON.
Si los archivos no están en un sitio web externo, podría intentar hacer una solicitud de Ajax para cada archivo. Si regresa como una falla, entonces usted sabe que no existe, de lo contrario, si se completa y / o tarda más de un umbral determinado para regresar, puede adivinar que existe. No siempre es perfecto, pero en general las solicitudes de "archivo no encontrado" son rápidas.
var threshold = 500,
successFunc = function(){ console.log(''It exists!''); };
var myXHR = $.ajax({
url: $(''#checkme'').attr(''href''),
type: ''text'',
method: ''get'',
error: function() {
console.log(''file does not exist'');
},
success: successFunc
});
setTimeout(function(){
myXHR.abort();
successFunc();
}, threshold);
Si los archivos están en el mismo dominio, entonces puedes usar AJAX para probar su existencia como dijo Alex Sexton ; sin embargo, no debe usar el método GET
, solo HEAD
y luego verificar el estado HTTP para el valor esperado (200 o solo menos de 400).
Aquí hay un método simple proporcionado a partir de una pregunta relacionada :
function urlExists(url, callback) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
callback(xhr.status < 400);
}
};
xhr.open(''HEAD'', url);
xhr.send();
}
urlExists(someUrl, function(exists) {
console.log(''"%s" exists?'', someUrl, exists);
});