Javascript : détecter une erreur 404

Fermé
Fiofio - 12 déc. 2009 à 13:19
Cephei Messages postés 118 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 décembre 2018 - 12 déc. 2009 à 21:30
Bonjour,

Un problème javascript. Je souhaite detécter une erreur 404 (page inexistante) avec mon code javascript.

Ma page principale comporte un cadre (iframe) nommé "photos" dans lequel s'ouvrent différentes pages en fonction de la navigation effectuées depuis un bouton figurant sur la page principale.

Pour les besoin de cette navigation, il est nécessaire de savoir quelle page est chargée dans le cadre "photos". pour cela j'utilise l'instruction :

pageencours = photos.location.pathname;


Ensuite je me sers de la variable "pageencours" pour orienter la navigation en fonction de son contenu.

Tant qu'une page est bien chargée dans le cadre "photos" tout se passe à merveille. Mais quand la page chargée n'existe pas (404 page inexistante) le code javascript plante et s'interrompt à partir de l'appel "photos.location.pathname".

Or j'ai besoin que le code se poursuive malgré l'erreur 404. Pour cela je cherche le moyen de savoir si la page a bien été chargée dans le cadre "photos" avant l'exécution de l'instruction "photos.location.pathname". Un truc du genre : Si page chargée dans "photos" alors exécuter l'instruction "photos.location.pathname" sinon passer à la suite du code.

Merci par avance pour votre aide, j'ai essayé des centaines de trucs, ça fait trois jours que je me casse la tête à trouver une solution, rien à faire.

Voici le code complet de la fonction :

function changepage(orientation) {

pageencours = photos.location.pathname;
pageencours = decodeURI(pageencours);
						
var x= pageencours.indexOf('liretexte');

/*----------------------- Adresse page en cours CONTIENT liretexte (Donc page texte) ------------------------ */
if (x > -1) {

  var position1 = pageencours.lastIndexOf('/',x)+1;	/*Définit la série photo en cours pour inclure, plus loin, son nom dans le*/
  var serieencours = pageencours.substring(position1,x);  /*fichier "liretexte" à ouvrir. par exemple "vanialiretexte001.htm"*/

  if ((pagetexteactuelle == 1 && orientation == -1) || (pagetexteactuelle == 3 && orientation == 1)) {
    pagetexteactuelle=1
    if (pageactuelle < 10) lien = 'theatre00'+pageactuelle+'.htm';
    else lien='theatre0'+pageactuelle+'.htm';
    window.open(lien,'photos');
    }
  else {
    pagetexteactuelle=pagetexteactuelle+orientation;
    if (pageactuelle < 10) lien = serieencours+'liretexte00'+pagetexteactuelle+'.htm';
    else lien = serieencours+'liretexte0'+pagetexteactuelle+'.htm';
    window.open(lien,'photos');
    }


/*alert('Page texte à afficher : ' +lien+'  --  Page Texte Actuelle : '+pagetexteactuelle);*/

  }
/*-------------------------------- FIN adresse page en cours CONTIENT  liretexte --------------------------------*/



/*----------------------- Adresse page en cours NE contient PAS liretexte (Donc page photo) ------------------------ */
else {

  if (pageactuelle == 0 && orientation == 1) {
    pageactuelle=70
    window.open('theatre070.htm','photos');
    }
  else if (pageactuelle == 70 && orientation == -1) {
    pageactuelle=0
    window.open('theatre000.htm','photos');
    }
  else {
    pageactuelle=pageactuelle-orientation;
    if (pageactuelle < 10) lien = 'theatre00'+pageactuelle+'.htm';
    else lien='theatre0'+pageactuelle+'.htm';
    window.open(lien,'photos');
    }

  }
/*-------------------------------- FIN adresse page en cours NE contient PAS liretexte --------------------------------*/


}

//-->

2 réponses

Cephei Messages postés 118 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 décembre 2018 19
12 déc. 2009 à 14:45
Bonjour,

Ben si ton code plante quand tu fais photos.location.pathname, c'est que photos.location vaut null quand c'est une 404 ...
Donc pour répondre à ta question, si tu veux savoir si t'es sur une "page" 404, fait :

if(photos.location != null)
{
// Page normale
}
else
{
// 404 (ou 403, ...)
}


Cependant permet moi une ou deux petites remarques :
- 404 n'est pas une page mais un code notifiant la non existance d'une page ...
- Faire un site en ce disant qu'il est normal qu'il y ai des liens qui n'aboutisse pas (404) c'est déjà bizarre, mais faire du code javascript exprès pour quand il n'y a rien me parrait complètement loufoque !

Je ne connais pas ton projet, je ne me permettrais donc pas de juger tes contraintes, mais à vu de nez et selon mon expérience non négligeable, ton architecture laisse à désirer et doit manquer d'efficacité !

Bonne journée et bon courage,
0
Merci Cephei,

J'ai déjà essayé ça ne fonctionne pas. "photos.location" ou tout autre instruction "photo.instruction" provoque un plantage du script quand le cadre "photos" contient un 404.

Je pourrais me passer de cette détection 404 avant l'exécution du script qui suit car en principe il ne doit pas y avoir de page manquante dans la structure du site. Oui, sauf qu'il arrive qu'Internet déconne et ne trouve pas, temporairement une page qui existe pourtant bien. Cela m'est déjà arrivé. Une réactualisation suffit pour que tout rentre dans l'ordre. Sauf que dans mon cas ça fout la merde.

Il s'agit d'une partie de mon site ou mes photos sont présentées sous forme de livre. la navigation entre les pages du livre s'effectue à l'aide de deux images bouton qui renvoient vers la fonction que j'ai mise en copie plus haut. Le numéro de la page du livre affichée est conservé dans une variable (pageactuelle). En faisant réactualisé, la variable est réinitialisé et le visiteur doit alors refaire défiler toutes les pages pour retrouver celle ou il en était et c'est très chiant. Donc ce que je veux, dans le cas d'un 404, c'est éviter d'avoir à réactualiser la page et que le clic sur l'image bouton permette de passer à la page suivante.
0
Cephei Messages postés 118 Date d'inscription mercredi 9 décembre 2009 Statut Membre Dernière intervention 10 décembre 2018 19
12 déc. 2009 à 21:30
Ah ok ! ben alors c'est "photos" tout seul qu'il faut tester comme variable ...
if(photos != null) ...

Sinon pour ton histoire de variable a garder absolument dans l'iframe au cas ou ça merderait et pour pas tout se retaper j'ai deux suggestions à te faire :
1 - Met cette variable en session, comme ça t'es tranquille en cas de plantage et la personne peut recharger le tout en restant sur la même photo dans l'iframe sans se prendre la tête avec du javascript.
2 - Si pour rechercher une photo particulière on est obligé de se les taper toutes les une derrière les autres c'est pas cool ! Non pas quelles ne soient pas belles, je n'en ai aucune idée ne les ayant pas vues, mais sur le principe, c'est plutôt pratique de trouver un système qui permette de proposer une pagination adapté au contexte.

Bonne soirée,
0