11540 sujets

JavaScript, DOM et API Web HTML5

Comment faire pour savoir si un fichier .js n'est pas disponible ?
C'est donc extement l'inverse d'un onload.
Je veux savoir si le chargement du fichier a échoué.

Dans mon cas je ne peux faire un test a base de HTTRequest car le fichier n'est pas dans le même domaine que la page qui l'utilise.
Donc pas de solution ajax.

Utiliser un timeout n'est pas judicieux non plus car je ne connais pas et ne peux estimer le temps de chargement du fichier.

Des idées ?
Modérateur
Bonjour ? Smiley ohwell

Tu peux très bien faire des requêtes sur ton propre domaine vers un script php qui vérifiera la disponibilité du fichier et te renverra la réponse.
Modifié par koala64 (21 Jun 2007 - 11:07)
Je travaille dans un environnement extrèmement fermé.
Je ne dispose d'aucune resource server side pour effectuer ce genre de test.

Je n'ai ni php, ni .net, ni .asp, ni autre.

Juste des .html et de la programmation client side pour m'aider.
Bonjour,

Vérifier qu'une variable définie dans le fichier existe ?

Exemple :

fichier.js

var included_fichier = true,


fichier.html

<script type="text/javascript">
  if( included_fichier )
  {
/* traitement */
  }
</script>
Cette technique me permet uniquement de savoir si un fichier est chargé ou pas encore chargé.

Il peut y avoir un temps de latence qui fait que pendant un certain temps included_fichier reste undefined.

Mais comment savoir si le chargement du fichier a définitivement échoué ?
Dans le cas par exemple ou le serveur hostant le .js ne repond pas.
Modifié par Grumelo (21 Jun 2007 - 13:35)
Pourquoi tu ne lances pas l'exécution de tes script depuis le js appelé?

car la problématique que tu soulèves est la même pour la page qui appelle ton fichier. On reste dans un environnement client serveur avec les containtes que l'on connait.

Puis avec de la "bidouille" tu peux très bien faire en sorte de tester régulièrement mais c'est une chose à laquelle je ne me préoccuppe même pas, car on en revient à une problématique de conception.
En théorie, window.onload n'est déclenché que si tous les éléments dépendants du document sont chargés. Donc tu peux faire le test évoqué ci-dessus dans le window.onload.

Mais si le serveur ne répond pas, tu vas avoir le même problème qu'avec un timeout, vu qu'il n'y aura pas de réponse avant un certain temps, le temps que le navigateur décide qu'il en a marre d'attendre la réponse.
Et le status Uninitialized de la propriété readyState de l'élement script ça m'aiderait pas ?
Modifié par Grumelo (21 Jun 2007 - 14:50)
Pour peu que cette propriété existe, ce qui a l'air vrai sur IE si j'en crois la doc MSDN, mais non garanti chez les autres, non, puisqu'il est susceptible de changer au fur et à mesure du chargement du script justement.

Si le serveur ne répond pas, elle va rester indéfiniment sur 'loading'.
Grumelo a écrit :
Et le status Uninitialized de la propriété readyState de l'élement script ça m'aiderait pas ?


Si ça fonctionne de la même manière qu'xhr, je dirais non : le statut non initialisé indique que la requête n'a même pas démarré chez le client.
Et puis je ne sais pas si cette propriété est disponible partout pour les éléments <script>.
Par contre, tu pourrais vérifier avec la valeur 2 ou 3 du readyState (je n'ai plus leur désignation en mémoire) avec l'élément xhr.

a écrit :

Mais comment savoir si le chargement du fichier a définitivement échoué ?
Dans le cas par exemple ou le serveur hostant le .js ne repond pas.

Je dirais, pas vraiment moyen de savoir si le chargement a échoué ou est encore en cours, même avec un readyState à 2 ou 3. ON pourrait admettre par exemple, que le serveur soit un peu encombré et qu'il faille attendre 30 secondes avant d'avoir chargé le contenu.
Tester l'existance et/ou la valeur d'une variable revient finalement à la même chose qu'appeler une fonction onload manuellement ou automatiquement une fois que le script est chargé : tu vas boucler en attendant la réponse et si tu ne reçois rien... ben tu vas boucler indéfiniment car tu pourras toujours espérer la recevoir quelques secondes plus tard, tu ne sauras jamais si c'est véritablement peine perdue ou pas. A moins que tu fixes un timeout après lequel tu arrêtes tout et s'il vient après ben c'est trop tard.


Pourquoi as-tu besoin de ce fichier, quel genre de code contient-t-il et comment comptes-tu réagir au cas où il ne serait pas disponible ?
Le fichier .js que je récupère contient des données au format JSON.

Le serveur qui me génère ces données est sécurisé par un cluster.
L'application qui utilise ce server de données gère corretement en internet le fait que les données soient soit sur la machine A soit sur la machine B.

Hélas lorsque je veux accèder à ces données depuis une page web je ne dispose pas d'un accès web au cluster. Je dois donc demandé mes données par defaut à la machine A et si elle ne répond pas alors je les demande à la machine B.

Voilà pourquoi j'ai besoin de savoir si un fichier .js est disponible ou non.

J'ai peut êre une psite à suivre.
l'event onload d'une fenêtre ou d'une iframe est flagué lorsque toute la page est chargée.

Si je défini une valeur par défaut à une variable javascript dans une page et que dans cette page je fais appelle au .js sur le server.
Lorsque l'iframe me dira 'onload' je serais certain que
* soit .js demandé a été chargé et donc à modifier par variable de test
* soit il n'a pas été chargé auquel cas ma variable test a toujour ca valeur par défaut.

On associant ce principe à la methode iframe hack d'Ajax j'ai donc un bon moyen de savoir si un serveur répond ou non.

Deplus plutot que de faire d'abord un appel de test 'coucou tu es la?' puis de demander les données, je peux faire les deux en un.

Qu'en pensez vous ?