在页面中动态添加javascript文件的方法

IT技术 javascript jquery prototypejs scriptaculous
2021-03-07 09:34:34

我已经看到 Scriptaculous.js 文件动态包含其所需的 javascript 文件。有没有更好的方法来动态包含 javascript。

例如,我想包含我的 js 文件,例如,

<script src="single.js?files=first.js,second.js,third.js..."></script>

我怎样才能以有效的方式做到这一点?

6个回答

要动态加载 .js 或 .css 文件,简而言之,这意味着使用 DOM 方法首先创建一个时髦的新“SCRIPT”或“LINK”元素,为其分配适当的属性,最后使用 element.appendChild()将元素添加到文档树中的所需位置。这听起来比实际情况要花哨得多。让我们看看这一切是如何结合在一起的:

function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}

loadjscssfile("myscript.js", "js") //dynamically load and add this .js file
loadjscssfile("javascript.php", "js") //dynamically load "javascript.php" as a JavaScript file
loadjscssfile("mystyle.css", "css") ////dynamically load and add this .css file

我希望它充分利用

请注意,这些文件可能不会按照您调用它们的确切顺序加载(和运行)。
2021-04-15 09:34:34
你需要添加 document.body.appendChild(fileref); 使其在浏览器中工作
2021-04-18 09:34:34
浏览器支持什么?
2021-04-20 09:34:34
document.getElementsByTagName("head")[0].appendChild(fileref)如果您有一些 document.ready() 内联工作,则它不起作用。$("head").append(fileref); 对我很有用,虽然它需要jquery.min.js内联引用。
2021-04-20 09:34:34
非常感谢您的努力。这就像一个一个地添加脚本。
2021-04-22 09:34:34

您可以使用该jQuery.getScript()功能...我认为通过此功能包含一个 JavaScript.js文件对您来说会容易得多

是参考。

我认为这就是我将用于 SO 上所有链接的文本。
2021-04-15 09:34:34

按照Salaman A 的意见建议,我发现了 Google 现在如何使用 Analytics:https : //developers.google.com/analytics/devguides/collection/gajs/asyncTracking

这是相同代码的更通用版本:

(function() {
    var s = document.createElement('script'); // Create a script element
    s.type = "text/javascript";               // optional in html5
    s.async = true;                           // asynchronous? true/false
    s.src = "//example.com/your_script.js"; 
    var fs = document.getElementsByTagName('script')[0];  // Get the first script
    fs.parentNode.insertBefore(s, fs);
})();

编辑:不要使用这种方法 - 我十年前写了这个答案!

把它留在这里纯粹是为了后代。


有很多不同的方式,但谷歌加载额外脚本的方式是这样的:

function getScript(src) {
    document.write('<' + 'script src="' + src + '"' +
                   ' type="text/javascript"><' + '/script>');
}

这是直接从谷歌地图加载器中获取的。

将脚本标签直接写入文档是最简单、最有效的方式。

您能否提供一个链接来备份它,因为所有 google 的 apis 都是以这种方式加载的,甚至是code.google.com/apis/loader
2021-04-16 09:34:34
谷歌本身不再推荐它:) 例如,他们已经改变了向网站添加谷歌分析代码的推荐方式。
2021-04-23 09:34:34
LOL 感谢您在回答后 3 1/2 年投反对票 - 不出所料,自从我写下这个答案以来,事情已经发生了变化。
2021-04-26 09:34:34
你去吧:使用传统代码段阅读介绍性段落,其中说我们建议您使用跟踪站点 中描述的默认跟踪代码段旧脚本(更准确地说是脚本加载器)使用document.write,更新后的脚本使用document.createElement. 这是另一个有趣的阅读:避免使用 document.write
2021-05-08 09:34:34
有趣的阅​​读。只有当您以这种方式异步加载脚本时,您才会真正受益,如果您使用回调,这很好。我想这取决于您是否需要按窗帘顺序加载脚本。
2021-05-11 09:34:34

动态添加新的 javascript 文件:

function includeJS(jsFile) {
    $('head').append($('<script>').attr('type', 'text/javascript').attr('src', jsFile));
}


// Pick a JS to load
if ($.browser.msie) {
    includeJS('first.js');
} else {
    includeJS('second.js');
}
includeJS('third.js');
如果您加载了 jQuery,只需使用 jQuery.getScript()。
2021-04-29 09:34:34