J'ai recherché Stack Overflow et Google pour le message d'erreur spécifique dans le titre, mais je ne l'ai pas trouvé (dans le contexte du codage JavaScript, pas des paramètres du navigateur). Sur mon site, il y a cinq fonctions qui sont appelées toutes les 10 secondes. Ces fonctions font des choses telles que:
Cependant, si l'utilisateur est connecté, mais est INACTIF (n'utilise pas la souris ou n'appuie sur aucune touche) pendant environ 15 minutes, j'obtiens le message d'erreur suivant lorsque j'inspecte l'élément avec Chrome:
Failed to load resource: net::ERR_NETWORK_IO_SUSPENDED // (x 5)
Uncaught Type Error: Cannot read property 'combinedfiletimeinput' of undefined //one of my previously defined form values is now not defined
À ce stade, le nouveau nombre d'e-mails de l'utilisateur, le nouveau nombre de messages instantanés, etc. deviennent vides (alors qu'ils étaient auparavant des nombres entiers). Tout ce que l'utilisateur a à faire est de rafraîchir la page ou d'aller sur une autre page pour se reconnecter, donc ce n'est pas énorme.
Ma solution de piratage consiste à utiliser une minuterie JavaScript pour déconnecter automatiquement l'utilisateur s'il n'y a aucun des événements suivants dans une période de 15 minutes:
Existe-t-il un moyen d'empêcher cette erreur "Échec du chargement de la ressource" de se produire?
MISE À JOUR: Cela semble se produire lorsque l'appareil de l'utilisateur dort/hiberne alors qu'il est encore connecté ... lorsque l'utilisateur redémarre l'appareil. C'est alors que le message d'erreur peut être vu sur Inspect Element, Firebug, etc. de Chrome.
MISE À JOUR 10/02/2014: J'ai maintenant condensé les cinq fonctions setTimeout en une grande fonction setTimeout. De plus, le formulaire qui contenait les heures de modification dans une entrée appelée "combinefiletimeinput" a été supprimé et je gère désormais différemment les heures de modification du fichier.
Voici une capture d'écran du journal des outils de développeur Chrome affichant l'erreur. J'ai ajouté "mysite" à la place du nom de mon site et "filename" à la place du nom de fichier réel. J'ai également blanchi le nom du fichier JavaScript externe, et tout ce qui reste est .js (désolé, mais j'essaie juste d'être prudent :)) J'ai coupé une partie de la capture d'écran, donc le texte serait assez grand pour être lu.
Comme vous pouvez le voir sur la capture d'écran, la demande est OK pour les trois premières demandes. Ensuite, je "dors" de mon appareil, puis je le rallume. C'est là que les deux prochaines demandes sont des erreurs (en rouge). Après ces deux premières erreurs, les requêtes recommencent à se dérouler normalement (lignes avec texte noir, après lignes avec texte rouge). La console affiche clairement le message d'erreur.
Je résume simplement mes commentaires sous la question pour la communauté.
Après quelques tests, il semble que le réglage du délai d'expiration Ajax s pour chaque appel soit un must. Sans délais d'attente, les erreurs NET :: telles que ERR_NETWORK_IO_SUSPENDED, ERR_INTERNET_DISCONNECTED, etc entraîneront l'arrêt de l'exécution par Ajax et ne reprendront pas après le réveil de l'ordinateur.
Pour jQuery:
$.ajax({
url: yourURL,
timeout: 4000
});
Pour XMLHttpRequest (XHR):
xhr.timeout = 4000;
De plus, un gestionnaire d'exceptions est nécessaire pour que votre script détecte les erreurs de connexion, afin que votre code JavaScript ne tombe pas en panne en raison d'un comportement/de valeurs inattendus.
Même avec des délais d'expiration et un gestionnaire d'exceptions, votre application lancera des erreurs NET ::, mais elles ne nuiraient pas à votre application; vous pourriez les considérer comme Avis.
Autant je pense que la capture d'exceptions devrait être le remède général, vous pouvez essayer de déclencher de faux événements (souris, défilement, clavier) pour voir si cela empêcherait Chrome d'aller au statut "inactif").
Question de dépassement de pile Comment simuler un clic de souris en utilisant JavaScript? pourrait être utile.