如何document.create脚本然后立即使用它

时间:2013-01-16 21:04:12

标签: javascript asynchronous settimeout

http://jsbin.com/iwuhum/1/

我正在尝试添加一个包含var myVar = "hello world"的脚本元素,之后我想使用myVar。不幸的是,typeof myVarundefined,除非我的setTimeout超过0setTimeout的{​​{1}}不起作用。我复制了Google Analytic创建脚本元素的方法,他们似乎让它工作得很好。我错过了什么吗?

注意:由于某种原因,jsbin的行为与您将此代码复制/粘贴到.html文件并在本地尝试一样。我想jsbin已经有一个延迟,这使0的{​​{1}}起作用。

setTimeout

2 个答案:

答案 0 :(得分:3)

我原以为这里的问题是脚本在你第一次调用typeof时没有加载。

您最好使用onload或类似jquery ready之类的事件来触发脚本加载时的回调。

 ga.onload = function(){
        $("#out").append('typeof myVar is ' + typeof myVar);
    }

回应评论,以下内容应该有效,但不是一个好主意:

var xhReq = new XMLHttpRequest();
//The false at the end makes the request sychronous
xhReq.open("GET", "http://bakersdozen13.lfchosting.com/test.js", false);
xhReq.send(null);
// I know eval is evil, but this is just a demonstration. This won't happen until the page is loaded.
eval(xhReq.responseText);
// Assuming myVar is a global variable initialized within the script this should now work
$("#out").append('typeof myVar is ' + typeof myVar);

进一步阅读:https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/Synchronous_and_Asynchronous_Requests

答案 1 :(得分:1)

必须加载脚本文件。没有办法等待它加载。由于看起来您正在使用jQuery,因此请使用getScript()

$.getScript("http://bakersdozen13.lfchosting.com/test.js", function() { 
    alert(myVar);
});

JSFiddle