107 votes

Comment forcer un script à se recharger et à se réexécuter ?

J'ai une page qui charge un script d'une tierce partie (fil d'actualité). Le src L'url du script est attribuée dynamiquement au chargement (par le code d'un tiers).

<div id="div1287">
    <!-- dynamically-generated elements will go here. -->
</div>

<script id="script0348710783" type="javascript/text">
</script>

<script type="javascript/text">
    document.getElementById('script0348710783').src='http://oneBigHairyURL';
</script>

Le script chargé à partir de http://oneBigHairyURL crée et charge ensuite des éléments avec les différents éléments du flux d'actualités, avec un joli formatage, etc. dans div1287 (l'identifiant "div1287" est transmis en http://oneBigHairyURL afin que le script sache où charger le contenu).

Le seul problème est qu'il ne le charge qu'une seule fois. J'aimerais qu'il se recharge (et donc qu'il affiche un nouveau contenu) toutes les n secondes.

Je me suis donc dit que j'allais essayer ceci :

<div id="div1287">
    <!-- dynamically-generated elements will go here. -->
</div>

<script id="script0348710783" type="javascript/text">
</script>

<script type="javascript/text">
    loadItUp=function() {
        alert('loading...');
        var divElement = document.getElementById('div1287');
        var scrElement = document.getElementById('script0348710783');

        divElement.innerHTML='';
        scrElement.innerHTML='';
        scrElement.src='';
        scrElement.src='http://oneBigHairyURL';
        setTimeout(loadItUp, 10000);
    };
    loadItUp();
</script>

Je reçois l'alerte, la div s'efface, mais aucun code HTML généré dynamiquement n'est rechargé dans la div.

Une idée de ce que je fais mal ?

0voto

Anthony Pulse Points 67

En utilisant PipesJS, je peux diluer cela en

 <dyn insert="here" id="clickity" ajax="url">Click for refresh</dyn>
 <!-- <dyn> is a dynamic linker in PipesJS -->
 <article id="here"></article>

Vous utiliserez cet état pour affecter l'article de la même manière que la source de la JS.

Ainsi, l'utilisation de

 <dyn attribution="src-attr" class-attr="src:newjs.js;" id="clickity">Click for refresh</dyn>
 <!-- attribution is the class of tags getting the new attr, src="newjs.js"-->
 <script class="src-attr" src="scripty.js"></script>

fera la même chose que <article> dans ce champ d'application. Il remplira le innerHTML.

si vous le souhaitez, utilisez un identifiant sur le fichier <head> étiquette.

Vous pouvez insérer des fonctions préemptives et les utiliser en tandem avec PipesJS. Vous pouvez également utiliser des fonctions qui viennent après l'appel.

Si vous préférez utiliser une minuterie, il suffit de créer un fichier

setInterval(function(input) { document.getElementById("clickity").click(); }, 3000);

setInterval() objet. La valeur de 3000 est exprimée en ms.

Vous pouvez voir PipesJS ici.

-2voto

Je sais que c'est trop tard, mais je veux partager ma réponse. Ce que j'ai fait, c'est enregistrer les balises de script dans un fichier HTML, en verrouillant les script sur mon fichier Index dans une div avec un id, quelque chose comme ça.

<div id="ScriptsReload"><script src="js/script.js"></script></div>

et lorsque j'ai voulu rafraîchir, j'ai simplement utilisé.

$("#ScriptsReload").load("html_with_scripts_tags.html", "", function(
    response,
    status,
    request
  ) {

  });

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X