首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JS中动态加载JS

在JS中动态加载JS
EN

Stack Overflow用户
提问于 2013-01-25 19:42:12
回答 9查看 686.1K关注 0票数 419

我有一个动态网页,我需要在另一个javascript文件中导入一个外部JS文件(在IF条件下)。

我试图寻找一个可行的解决方案,但没有奏效。

我曾尝试使用document.createElement()将JS文件加载到DOM中,但同样不起作用。显然,Js已加载到DOM中,但在当前JS文件中无法访问。

jQuery中的解决方案也很好

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-01-25 19:48:59

jQuery的$.getScript()有时会有错误,所以我使用自己的实现,如下所示:

代码语言:javascript
复制
jQuery.loadScript = function (url, callback) {
    jQuery.ajax({
        url: url,
        dataType: 'script',
        success: callback,
        async: true
    });
}

并像这样使用它:

代码语言:javascript
复制
if (typeof someObject == 'undefined') $.loadScript('url_to_someScript.js', function(){
    //Stuff to do after someScript has loaded
});
票数 170
EN

Stack Overflow用户

发布于 2013-01-25 20:04:21

我的猜测是,在您的纯DOM解决方案中,您做了一些类似的事情:

代码语言:javascript
复制
var script = document.createElement('script');
script.src = something;
//do stuff with the script

首先,这不会起作用,因为脚本没有添加到文档树中,所以不会加载。此外,即使您这样做了,javascript的执行仍会继续,而另一个脚本正在加载,因此在该脚本完全加载之前,它的内容将不可用。

您可以监听脚本的load事件,并按您所希望的那样处理结果。所以:

代码语言:javascript
复制
var script = document.createElement('script');
script.onload = function () {
    //do stuff with the script
};
script.src = something;

document.head.appendChild(script); //or something of the likes
票数 815
EN

Stack Overflow用户

发布于 2015-07-13 09:55:04

我需要经常这样做,所以我使用下面的代码:

代码语言:javascript
复制
var loadJS = function(url, implementationCode, location){
    //url is URL of external file, implementationCode is the code
    //to be called from the file, location is the location to 
    //insert the <script> element

    var scriptTag = document.createElement('script');
    scriptTag.src = url;

    scriptTag.onload = implementationCode;
    scriptTag.onreadystatechange = implementationCode;

    location.appendChild(scriptTag);
};
var yourCodeToBeCalled = function(){
//your code goes here
}
loadJS('yourcode.js', yourCodeToBeCalled, document.body);

有关更多信息,请参阅此站点的How do I include a JavaScript file in another JavaScript file?,它是我的函数想法的来源。

票数 109
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14521108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档