首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从动态加载的外部javascript文件访问变量

从动态加载的外部javascript文件访问变量
EN

Stack Overflow用户
提问于 2011-05-05 20:08:54
回答 3查看 2.2K关注 0票数 3

我有一个外部js文件正在用document.createElement()加载(我不能修改它),我需要从它访问一个变量。问题是,我不知道它什么时候完成加载。我尝试了jQuery的文档就绪功能,但它似乎比javascript文件部署得更快。不过,我可以像这样访问变量:

代码语言:javascript
复制
setTimeout("console.log(swifttagdiv.firstChild.firstChild.src)", 5000);

但这只是一个测试,看看变量是否是全局的。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-05 20:18:26

您可以使用Javascript注入脚本,而不是将其放入页面中。这样,您就可以控制何时加载它。

下面是我用来在页面中动态注入代码的函数:

代码语言:javascript
复制
    function inject(src, cb, target){
        target = target || document.body;
        var s = document.createElement('SCRIPT');
        s.charset = 'UTF-8';
        if(typeof cb === 'function'){ 
            s.onload = function(){
                cb(s);
            }; 
            s.onreadystatechange = function () {
                (/loaded|complete/).test(s.readyState) && cb(s);
            };                     
        }
        s.src = src;
        target.appendChild(s);
        return s;
    }

要使用它:

代码语言:javascript
复制
inject('/path/to/file.js', function(script){
   //your code here
})
票数 4
EN

Stack Overflow用户

发布于 2011-05-05 20:16:00

代码语言:javascript
复制
var checkvarint = setInterval(function(){
  if(swifttagdiv.firstChild.firstChild.src){
    varLoaded(); clearInterval(checkvarint);
  }
},10);

function varLoaded(){
    alert("LOADED!");
    alert(swifttagdiv.firstChild.firstChild.src);
}
票数 2
EN

Stack Overflow用户

发布于 2011-05-05 20:38:19

Mic's answer很棒。

下面是同样的事情,只是不那么抽象,也许会有启发意义。

代码语言:javascript
复制
var scriptElement = document.createElement( 'script' );
scriptElement.type = "text/javascript";
scriptElement.src  = "https://ajax.googleapis.com/ajax/libs/ext-core/3.1.0/ext-core-debug.js";

function loadHandler() {
    alert( 'loaded' );
}

// for ie
scriptElement.onreadystatechange = function () {
    if( this.readyState == 'complete' ){
        loadHandler();
    }
}
// for others
scriptElement.onload= loadHandler;

document.getElementsByTagName('head')[0].appendChild( scriptElement );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5897414

复制
相关文章

相似问题

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