Javascript更新功能通过更改src脚本文件

时间:2014-11-15 12:10:03

标签: javascript function updates

我的javascript文件包含功能:

scr.js:

function myf(){
    alert('aaa');
}
myf();

加载页面后,我看到'aaa'对话框。这是正确的。 接下来,我将脚本源更改为:

function myf(){
    alert('bbb'); ///////////
}
myf();

和src文件通过添加到他的时间戳(对于更新文件):

$('script[src^="./scr.js"]').attr('src','./scr.js?='+new Date().getTime());

问题:

  1. 更新文件后,myf()函数不会运行。
  2. 从浏览器控制台运行myf()函数后,我看到对话框'aaa'不是'bbb'
  3. 当我用src scr.js删除脚本标记时,我可以再次调用我的函数
  4. 问题在哪里以及更新的内容是什么?

1 个答案:

答案 0 :(得分:2)

  1. 据我所知,更改脚本src属性,不会强制浏览器下载脚本;您需要创建一个新的脚本标记并将其附加到DOM。
  2. 因为浏览器没有下载并执行新脚本。
  3. 当您的脚本首次由浏览器运行时,它会创建一个全局函数,该函数已附加到全局对象;这就是为什么你仍然可以调用它,即使你已经删除了脚本。
  4. 更新(可能的解决方案):

    1. 使用以下内容创建一个脚本元素:
    2. function createScript(src) {
          var s = document.createElement("script");
          s.src = src;
          return s;
      }
      1. 更新DOM:
      2. var oldScript = document.querySelector("script[src^='s.js']");
        var newScript = createScript("s.js?t=" + (new Date()).getTime());
        document.body.replaceChild(newScript, oldScript);
        

        (如果需要,可以将其翻译成jQuery)