IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Code javascript marche par intermittence


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Code javascript marche par intermittence
    Bonjour,
    Tout d'abord, sachez que ce que je vais expliquer peut paraître étrange, mais j'ai fais plusieurs test et c'est bien comme cela que ça se passe.
    Je veux faire marcher un widget javascript sur mon site sous wordpress (WPSuperCache, compresssion, mimification, cache du navigateur). Ce dernier est un script connu, utilisé, et qui fonctionne très bien sur d'autres sites sans mon problème.
    Le script en question:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <script>
    baseUrl = "https://widgets.cryptocompare.com/";
    var scripts = document.getElementsByTagName("script");
    var embedder = scripts[ scripts.length - 1 ];
    var cccTheme = {"General":{"borderWidth":"4px","borderColor":"#ecf0f1"},"Tabs":{"color":"#373e59","activeColor":"#373e59"},"Row":{"color":"#373e59","borderColor":"#ecf0f1"},"Trend":{"colorUp":"#27AE60","colorDown":"#E74C3C"},"Conversion":{"color":"#FFF"}};
    (function (){
    var appName = encodeURIComponent(window.location.hostname);
    if(appName==""){appName="local";}
    var s = document.createElement("script");
    s.type = "text/javascript";
    s.async = true;
    var theUrl = baseUrl+'serve/v1/coin/multi?fsyms=BTC,ETH,XMR,LTC,DASH,IOT,EOS,NEO&tsyms=USD,EUR,BTC';
    s.src = theUrl + ( theUrl.indexOf("?") >= 0 ? "&" : "?") + "app=" + appName;
    embedder.parentNode.appendChild(s);
    })();
    </script>
    Mais voilà, mis comme ça à la bonne place il ne fonctionne pas vraiment,voir pas du tout.
    -Firefox desktop: marche 0%
    - Chrome desktop: marche 0%
    - Edge: marche après un rafraîchissement de la page
    -Mobile: marche 100%

    J'ai laissé un peu tombé tout en laissant le code, puis en faisant des manipulations j'ai inséré une balise <script></script> (vide) dans le footer.php et la..
    - Chrome sans Ublock: marche 100%
    - Chrome avec Ublock: marche 1/2 environ (il faut rafraichir la page, puis avec un nouveau rafraichissement ça marche plus etc..)
    -Edge: marche après un rafraîchissement de la page
    - Mobile: marche

    J'ai bien vérifié qu'en enlevant le <script> dans le footer que ça ne marche plus et qu'il avait donc une importance.

    Je suis totalement perdu, avez-vous une idée? Peut être que le script est viré quand la page est fraiche, peut être qu'il manque des trucs pour l'initier, vraiment je sais pas.

    Merci

  2. #2
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Bonjour,
    il ne fonctionne pas vraiment,voir pas du tout.
    C'est visible et non fonctionnel ou pas visible du tout ?

    Une piste serait de regarder avec l'inspecteur le code généré.
    Quand je place le script tel quel dans un fichier vide, rien ne s'affiche : dans l'inspecteur, je vois que des balises sont insérées dans le head.
    Si je le place après une balide body, ça apparaît.

    Peut-être qu'en regardant l'inspecteur, il serait possible de voir si l'intégration est bien placée et aussi s'il n'y a pas des erreurs javascript dans la console.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Non visible. L'interface se réorganise même comme ci le site n'avait jamais été la (ça ne fait donc pas de carré blanc/transparent).
    J'avais vraiment pas pensé à la console, et très bonne idée car quand ça ne marche pas j'ai cette erreur:
    -Chrome:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Uncaught TypeError: Cannot read property 'appendChild' of null
        at multi?fsyms=BTC,BCH,ETH,XMR,LTC,DASH,IOT,EOS,NEO&tsyms=USD,EUR,BTC&app=cryptoactu.com:789
    -Firefox (tout le temps du coup):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TypeError: document.currentScript.parentNode is null[En savoir plus]  multi:789:1
    	<anonyme> https://widgets.cryptocompare.com/serve/v1/coin/multi:789:1
    Je sais maintenant d'où cela vient, mais je ne suis pas très avancé quant à la résolution du problème.
    Merci pour ta réponse en tout cas.

  4. #4
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Dans le code initialement posté, on voit qu'un script externe est chargé grâce à une nouvelle balise script créée dans le code avec document.createElement("script").

    D'après l'erreur signalée, je déduis que l'adresse du script est :
    https://widgets.cryptocompare.com/se...cryptoactu.com
    La ligne 789, c'est la dernière : document.currentScript.parentNode.appendChild(embedable);.

    Firefox dit que le nœud parent de document.currentScript n'existe pas.
    Il reste à voir où est ajoutée cette balise script dans le code.
    Dans l'inspecteur (à côté de la console) on devrait trouver cette balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" async="" src="https://widgets.cryptocompare.com/serve/v1/coin/multi?fsyms=BTC,BCH,ETH,XMR,LTC,DASH,IOT,EOS,NEO&tsyms=USD,EUR,BTC&app=cryptoactu.com"></script>
    Il faudrait voir aussi avec console.log ce que vaut embedder.parentNode, étant donné que la balise de script est ajoutée aux enfants de ce noeud.
    Si besoin, on peut adapter le code de départ et modifier embedder pour cibler un autre nœud.

    J'ajoute (21h) :
    Par rapport à l'erreur sur document.currentScript.parentNode, peut-être qu'il pourrait y avoir une erreur plus directement sur document.currentScript (mais je me demande si le message d'erreur serait le même).
    Peut-être essayer de désactiver cette ligne s.async = true; ou mettre false. C'est juste une vague idée à tenter.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci encore pour ta réponse
    La balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <script type="text/javascript" async="" src="https://widgets.cryptocompare.com/serve/v1/coin/multi?fsyms=BTC,BCH,ETH,XMR,LTC,DASH,IOT,EOS,NEO&tsyms=USD,EUR,BTC&app=cryptoactu.com"></script>
    n’était pas présente dans le code source (peut importe si le widget marche ou pas), je n'ai que le script que j'ai donné lors de mon post initial.
    J'ai essayé de l'ajouter en plus et tout fonctionne sur tous les navigateurs. Par contre, j'ai du coup deux fois le widget qui s'affiche dans les conditions qui marchaient.
    Si j'enlève le code initial, forcément le widget marche mais je perd les personalisations (variable ccctheme)
    console.log(embedder.parentNode) me retourne:

  6. #6
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Si j'enlève le code initial, forcément le widget marche mais je perd les personalisations (variable ccctheme)
    Il devrait suffire de l'ajouter juste avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <script>
    var cccTheme = {"General":{"borderWidth":"4px","borderColor":"#ecf0f1"},"Tabs":{"color":"#373e59","activeColor":"#373e59"},"Row":{"color":"#373e59","borderColor":"#ecf0f1"},"Trend":{"colorUp":"#27AE60","colorDown":"#E74C3C"},"Conversion":{"color":"#FFF"}};
    </script>
    <script src="https://widgets.cryptocompare.com/serve/v1/coin/multi?fsyms=BTC,BCH,ETH,XMR,LTC,DASH,IOT,EOS,NEO&tsyms=USD,EUR,BTC&app=cryptoactu.com"></script>

    console.log(embedder.parentNode) me retourne:
    null
    undefined
    Le problème vient probablement de là, mais c'est assez curieux par rapport au fait que le script semble s'exécuter malgré tout.

    La balise
    ...
    n’était pas présente dans le code source
    Je précise qu'il s'agit de regarder vraiment dans l'inspecteur (F12, onglet "Inspecteur" sur Firefox) et non dans le code source initial (qui ne montrera pas les changements apportés à la page).

    Mais bon, je pense que le script initial est mal intégré dans la page (à voir aussi s'il est en lien avec un événement comme load).
    Après, comme je disais, on peut rester sur le script de départ et cibler un autre nœud.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci vraiment pour ton aide, j'ai ajouté la variable et ça marche comme escompté.
    Quand je parlais de code source, je parlais du code reçu côté client (Crtl+U), ce qui est pareil que ce qui est affiché dans l'inspecteur non?

    Bon, c'est très étrange mais tant pis ça marche avec la bricole donc c'est super!

  8. #8
    Membre éclairé
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 335
    Points : 715
    Points
    715
    Par défaut
    Quand je parlais de code source, je parlais du code reçu côté client (Crtl+U), ce qui est pareil que ce qui est affiché dans l'inspecteur non?
    Ah non, pas pareil justement.
    Quand je parlais du "code source initial", je parlais bien du "code reçu côté client" (et non des fichiers sources).
    Avec l'inspecteur, on peut voir en temps réel les changements et l'interprétation que fait le navigateur du code source.
    Si un script ajoute un élément dans l'arborescence, il va apparaître dans l'inspecteur (et non dans le code affiché avec Crtl+U).
    Je pense qu'en regardant dans l'inspecteur, le problème aurait pu être mieux étudié.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fermeture fenetre crée par code javascript
    Par Kerod dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/02/2010, 00h04
  2. Code javascript marche avec IE non plus avec firefox
    Par m3allem001 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/02/2010, 12h04
  3. [AJAX] Executer code javascript écrit par ajax
    Par socket77 dans le forum AJAX
    Réponses: 1
    Dernier message: 23/12/2009, 08h13
  4. Remplacer des controles ajax dans un site ASP .net par des codes javascript
    Par Contact2012 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/09/2008, 13h50
  5. code javascript pas interprété par internet explorer
    Par cuisto44000 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 01/09/2008, 18h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo