当前位置:  开发笔记 > 编程语言 > 正文

仅动态包含javascript文件一次

如何解决《仅动态包含javascript文件一次》经验,为你挑选了1个好方法。

我有一个我写的javascript函数,它被用来包含一个外部JS文件,但只有一次.我需要这样一个函数的原因是因为在通过AJAX加载某些内容时调用它并且我需要为该内容运行特定于页面的代码(不,只是使用.live不会覆盖它).

这是我的尝试,为简洁而缩短:

$.include_once = function(filename) {
    if ($("script[src='" + filename + "']").length === 0) {
        var $node = $("")
            .attr({
                src : filename,
                type : "text/javascript"
            })
        ;
        $(document.body).append($node);
    }
};

这样可以正常工作:调用该函数,它加载外部文件,并在加载时运行该文件.完善.

问题是它将始终重新加载该外部文件:我用来检查脚本是否存在的查询总是找不到任何东西!

在调试时,我添加了一些行:

alert($("script").length);     // alerts: 4
$(document.body).append($node);
alert($("script").length);     // alerts: 4

查看动态源代码(Firebug的HTML选项卡),我根本找不到脚本标记.

我知道我可以维护一个我以前包含的文件数组,但是我希望使用这样的方法,如果它工作的话,它看起来更健壮了,因为不是所有的JS文件都是以这种方式包括在内.

任何人都可以解释在第二个片段中看到的行为吗?



1> Crescent Fre..:

在这种情况下,jQuery有点愚蠢; 它完全不符合你的期望.当你append($node)jQuery做到这一点:

jQuery.ajax({
  url: $node.src,
  async: false,
  dataType: "script"
})

Woops!对于本地文件(例如在同一个域上),jQuery XMLHttpRequest为.js文件体执行标准,并通过创建

大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有