2012-06-03 45 views
19

我有它加载了几个JavaScript文件的HTML:刷新JavaScript文件,而无需刷新HTML

<script src="assets/js/a.js"></script> 
<script src="assets/js/b.js"></script> 
<script src="assets/js/jquery.min.js"></script> 

正如我调试/测试我在我的浏览器的控制台的Javascript,是否有可能重新加载这些JavaScript文件,而不需要重新加载整个HTML页面?

+1

如果您正在调试,您想调试用户体验。如果你只是重新加载一个脚本,你将从一个不同的上下文开始,然后用户会。因此,在调试时重新加载整个HTML并不是什么坏事。 –

+0

很好的问题。但它已被问及回答。 [有没有办法在开发时刷新javascript include?](http://stackoverflow.com/questions/5285006/is-there-a-way-to-refresh-just-the-javascript-include-while - 开发) – naveen

+0

感谢所有的答案和评论。 – tommi

回答

18

你可以删除,然后重新添加:

$('script').each(function() { 
    if ($(this).attr('src') !== 'assets/js/jquery.min.js') { 
     var old_src = $(this).attr('src'); 
     $(this).attr('src', ''); 
     setTimeout(function(){ $(this).attr('src', old_src + '?'+new Date()); }, 250); 
    } 
}); 
+8

@Truth - 他在问题代码中有一个jQuery脚本元素! – PitaJ

+1

+1否定-1。 @Truth:3并不意味着所有:) atleast在StackOverflow :)但PitaJ你的代码是越野车。 1. setTimeout在这段代码中不会做任何事情。更重要的是,替换脚本不会在这里工作。你只能添加一个新的脚本(http://stackoverflow.com/q/2226519/17447) – naveen

+0

@naveen [SRC使用jQuery不执行更换脚本] - 修正了代码 – PitaJ

0

与jQuery 2.0.3测试和铬43

function reloadScript(id) { 

    var $el = $('#' + id); 

    $('#' + id).replaceWith('<script id="' + id + '" src="' + $el.prop('src') + '"><\/script>'); 
} 

Chrome的抱怨,但工作原理:

在主线程

同步的XMLHttpRequest已被弃用贝科对最终用户的体验使用其有害影响。如需更多帮助,请查询http://xhr.spec.whatwg.org/

脚本标签必须有ID。 呼叫控制台:

reloadScript('yourid'); 

不会删除事件侦听器,所以例如点击按钮如果一旦重装被执行两次。

0

基于PitaJ的解决方案。

刷新所有的JavaScript的功能。你可以在任何你想要的地方打这个电话。

$('script').each(function() { 
     if ($(this).attr('src') != undefined && $(this).attr('src').lastIndexOf('jquery') == -1) { 
      var old_src = $(this).attr('src'); 
      var that = $(this); 
      $(this).attr('src', ''); 

      setTimeout(function() { 
       that.attr('src', old_src + '?' + new Date().getTime()); 
      }, 250); 
     } 
    });