我正在尝试添加一个包含var myVar = "hello world"
的脚本元素,之后我想使用myVar
。不幸的是,typeof myVar
为undefined
,除非我的setTimeout
超过0
。 setTimeout
的{{1}}不起作用。我复制了Google Analytic创建脚本元素的方法,他们似乎让它工作得很好。我错过了什么吗?
注意:由于某种原因,jsbin的行为与您将此代码复制/粘贴到.html文件并在本地尝试一样。我想jsbin已经有一个延迟,这使0
的{{1}}起作用。
setTimeout
答案 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);
});