【问题标题】:Javascript update function via change src script file通过更改 src 脚本文件的 Javascript 更新功能
【发布时间】:2015-12-15 08:08:55
【问题描述】:

我的带有函数的 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 删除脚本标签时,我可以再次调用我的函数

问题出在哪里,更新脚本怎么办?

【问题讨论】:

    标签: javascript function updates


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

    更新(可能的解决方案):

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

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

    【讨论】:

    • 是的!秘诀在于删除旧的脚本标签,并添加新的。相同的更新 src 不会更新脚本。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多