Como verificar se a página existe usando Javascript

Hello 

Quando clico no link, ele deve verificar se a página existe ou não. Se existir, vai para essa página (www.example.com), mas se a página não existir, ela redireciona para outro URL.

Depende se a página existe no mesmo domínio ou não. Se você estiver tentando determinar se existe uma página em um domínio externo, isso não funcionará – a segurança do navegador impede chamadas entre domínios (a mesma política de origem).

Se estiver no mesmo domínio, no entanto, você pode usar jQuery como Buh Buh sugerido. Embora eu recomende fazer uma solicitação HEAD em vez da solicitação GET, o método padrão $.ajax() faz – o método $.ajax() a página inteira. Fazer uma solicitação HEAD só retornará os headers e indicará se a página existe (códigos de resposta 200 – 299) ou não (códigos de resposta 400 – 499). Exemplo:

 $.ajax({ type: 'HEAD', url: 'http://yoursite.com/page.html', success: function() { // page exists }, error: function() { // page does not exist } }); 

Veja também: http://api.jquery.com/jQuery.ajax/

Um bom trabalho é fazer proxy. Se você não tiver access a um servidor, poderá usar o YQL. Visite: http://developer.yahoo.com/yql/console/

De lá você pode fazer algo como: select * from htmlstring where url="http://google.com" . Você pode usar a “consulta REST” que eles têm nessa página como ponto de partida para o seu código.

Aqui está um código que aceitaria um URL completo e usaria o YQL para detectar se essa página existe:

 function isURLReal(fullyQualifiedURL) { var URL = encodeURIComponent(fullyQualifiedURL), dfd = $.Deferred(), checkURLPromise = $.getJSON('http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20htmlstring%20where%20url%3D%22' + URL + '%22&format=json'); checkURLPromise .done(function(response) { // results should be null if the page 404s or the domain doesn't work if (response.query.results) { dfd.resolve(true); } else { dfd.reject(false); } }) .fail(function() { dfd.reject('failed'); }); }); return dfd.promise(); } // usage isURLReal('http://google.com') .done(function(result) { // yes }) .fail(function(result) { // no, or request failed }); 

Atualização de 2 de agosto de 2017

Parece que o Yahoo preteriu “select * from html”, embora “select * from htmlstring” funcione.

Baseado na documentação do XMLHttpRequest:

 function returnStatus(req, status) { //console.log(req); if(status == 200) { console.log("The url is available"); // send an event } else { console.log("The url returned status code " + status); // send a different event } } function fetchStatus(address) { var client = new XMLHttpRequest(); client.onreadystatechange = function() { // in case of network errors this might not give reliable results if(this.readyState == 4) returnStatus(this, this.status); } client.open("HEAD", address); client.send(); } fetchStatus("/"); 

No entanto, isso só funcionará para URLs no mesmo domínio que o URL atual. Você quer poder fazer ping em serviços externos? Se assim for, você pode criar um script simples no servidor que faz o seu trabalho para você e usar o javascript para chamá-lo.

Se estiver no mesmo domínio, você pode fazer uma solicitação head com o object xmlhttprequest [ajax] e verificar o código de status.

Se estiver em outro domínio, faça um xmlhttprequest no servidor e faça a chamada para ver se está ativo.

por que não criar um manipulador 404 personalizado no servidor web? esta é provavelmente a maneira mais “boa de suportar” para fazer isso.

Se você está feliz em usar o jQuery, você pode fazer algo assim. Quando a página carrega, faça uma chamada ajax para cada link. Em seguida, basta replace o href de todos os links que falharem.

   
 $.ajax({ url: "http://something/whatever.docx", method: "HEAD", statusCode: { 404: function () { alert('not found'); }, 200: function() { alert("foundfile exists"); } } });