pagina mostrar mientras llamar funcion evento ejemplo ejecutar despues cargar carga asincrona antes javascript html news-feed script-tag

javascript - mostrar - ¿Cómo forzar a un script a volver a cargar y volver a ejecutar?



mostrar loading mientras carga pagina jquery (4)

¿Has intentado eliminarlo del DOM y luego volver a insertarlo?

Solo lo hice, eso no funciona. Sin embargo, crear una nueva etiqueta de script y copiar el contenido de la etiqueta de script existente, luego agregarlo, funciona bien.

Ver mi ejemplo http://jsfiddle.net/mendesjuan/LPFYB/

var scriptTag = document.createElement(''script''); scriptTag.innerText = "document.body.innerHTML += ''Here again ---<BR>'';"; 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);

Esto no funcionará si espera que el script cambie cada vez, lo cual creo que es su caso. Debe seguir la sugerencia de Kelly, simplemente elimine la etiqueta de secuencia de comandos anterior (solo para mantener delgado el DOM, no afectará el resultado) y vuelva a insertar una nueva etiqueta de secuencia de comandos con el mismo src, más un cachebuster.

Tengo una página que está cargando un script de un tercero (noticias). La url src para el script se asigna dinámicamente en la carga (por código de un tercero).

<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>

La secuencia de comandos cargada desde http://oneBigHairyURL crea y carga elementos con varias cosas del feed de noticias, con formato bonito, etc. en div1287 (el Id "div1287" se pasa en http://oneBigHairyURL para que el script sepa dónde para cargar el contenido).

El único problema es que solo lo carga una vez. Me gustaría volver a cargar (y así mostrar contenido nuevo) cada n segundos.

Entonces, pensé que probaría esto:

<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>

Recibo la alerta, el div lo borra, pero no se recarga ningún HTML generado dinámicamente.

¿Alguna idea de lo que estoy haciendo mal?


¿Qué le parece agregar una nueva etiqueta de script a <head> con el script para (re) cargar? Algo como a continuación:

<script> function load_js() { var head= document.getElementsByTagName(''head'')[0]; var script= document.createElement(''script''); script.src= ''source_file.js''; head.appendChild(script); } load_js(); </script>

El punto principal es insertar una nueva etiqueta de secuencia de comandos: puede eliminar la anterior sin consecuencias. Es posible que necesite agregar una marca de tiempo a la cadena de consulta si tiene problemas de almacenamiento en caché.


Este es un método similar al de Kelly, pero eliminará cualquier script preexistente con la misma fuente y usará jQuery.

<script> function reload_js(src) { $(''script[src="'' + src + ''"]'').remove(); $(''<script>'').attr(''src'', src).appendTo(''head''); } reload_js(''source_file.js''); </script>

Tenga en cuenta que el atributo ''tipo'' ya no es necesario para los scripts a partir de HTML5. ( http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#the-script-element )


Pequeño ajuste a la respuesta de Luke,

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

y llamarlo así,

relaodJs("myFile.js");

Esto no tendrá ningún problema relacionado con la ruta.