Come forzare lo script a ricaricare e rieseguire?

Ho una pagina che sta caricando uno script da una terza parte (news feed). L’URL src per lo script viene assegnato dynamicmente al caricamento (per codice di terze parti).

 
document.getElementById('script0348710783').src='http://oneBigHairyURL';

Lo script caricato da http://oneBigHairyURL quindi crea e carica elementi con le varie cose dal feed di notizie, con una formattazione carina, ecc. In div1287 (l’ID “div1287” viene passato in http://oneBigHairyURL modo che lo script sappia dove per caricare il contenuto).

L’unico problema è che lo carica solo una volta. Mi piacerebbe ricaricare (e quindi visualizzare nuovi contenuti) ogni n secondi.

Quindi, ho pensato di provare questo:

 
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();

Ottengo l’avviso, il div cancella, ma nessun HTML generato dynamicmente viene ricaricato su di esso.

Qualche idea su cosa sto facendo male?

Che ne dici di aggiungere un nuovo tag script a con lo script da (ri) caricare? Qualcosa come di seguito:

  

Il punto principale è inserire un nuovo tag script: puoi rimuovere quello vecchio senza conseguenze. Potrebbe essere necessario aggiungere un timestamp alla stringa di query se si verificano problemi di memorizzazione nella cache.

Ecco un metodo simile a quello di Kelly, che rimuoverà qualsiasi script preesistente con la stessa fonte e utilizzerà jQuery.

  

Nota che l'attributo 'tipo' non è più necessario per gli script come HTML5. ( http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#the-script-element )

Hai provato a rimuoverlo dal DOM, quindi a inserirlo di nuovo?

L’ho appena fatto, non funziona. Tuttavia, la creazione di un nuovo tag script e la copia dei contenuti del tag script esistente, quindi l’aggiunta, funziona bene.

Vedi il mio esempio http://jsfiddle.net/mendesjuan/LPFYB/

 var scriptTag = document.createElement('script'); scriptTag.innerText = "document.body.innerHTML += 'Here again ---
';"; var head = document.getElementsByTagName('head')[0]; head.appendChild(scriptTag); setInterval(function() { head.removeChild(scriptTag); var newScriptTag = document.createElement('script'); newScriptTag.innerText = scriptTag.innerText; head.appendChild(newScriptTag); scriptTag = newScriptTag; }, 1000);

Questo non funzionerà se ti aspetti che lo script cambi ogni volta, il che credo sia il tuo caso. Dovresti seguire il suggerimento di Kelly, basta rimuovere il vecchio tag script (solo per mantenere il DOM slim, non influenzerà il risultato) e reinserire un nuovo tag script con lo stesso src, più un cachebuster.

Piccolo tweak alla risposta di Luke,

  function reloadJs(src) { src = $('script[src$="' + src + '"]').attr("src"); $('script[src$="' + src + '"]').remove(); $('').attr('src', src).appendTo('body'); } 

e chiamalo come,

 relaodJs("myFile.js"); 

Questo non avrà alcun problema relativo al percorso.