如何强制脚本重新加载并重新执行?

我有一个从第三方加载脚本的页面(新闻提要)。 脚本的src url是在加载时(每个第三方代码)dynamic分配的。

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

http://oneBigHairyURL加载的脚本,然后创build和加载元素与各种东西从新闻饲料,格式相当格式等进入div1287 (Id“div1287”在http://oneBigHairyURL传递,所以脚本知道在哪里加载内容)。

唯一的问题是,它只加载一次。 我希望它每n秒重新加载(并因此显示新的内容)。

所以,我想我会试试这个:

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

我得到警报,div清除,但没有dynamic生成的HTML重新加载到它。

任何想法我做错了什么?

如何用脚本向<head>添加新的脚本标签以(重新)加载? 如下所示:

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

主要的一点是插入一个新的脚本标签 – 你可以删除旧的没有后果。 如果您有caching问题,您可能需要将时间戳添加到查询string。

这里有一个类似于Kelly的方法,但是会删除任何已有的源代码,并使用jQuery。

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

请注意,HTML5的脚本不再需要“type”属性。 ( http://www.w3.org/html/wg/drafts/html/master/scripting-1.html#the-script-element

你有没有尝试从DOM中删除它,然后再次插入它?

我刚刚做了,那是行不通的。 但是,创build一个新的脚本标记并复制现有脚本标记的内容,然后添加它,效果很好。

看我的例子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); 

如果你希望脚本每次都改变的话,这是行不通的,我相信是你的情况。 你应该按照Kelly的build议,只删除旧的脚本标记(只是为了保持DOM苗条,不会影响结果),并重新插入一个新的脚本标记与同一个src,加上一个caching。

对卢克的答案做了小小的调整,

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

并称之为,

 relaodJs("myFile.js"); 

这不会有任何path相关的问题。

Interesting Posts