这是我的javascript代码:
<script type="text/javascript">
var js = document.createElement("script");
js.type = "text/javascript";
js.src = "//mysite.co/js.js";
document.body.appendChild(js);
alert(x);
</script>
在mysitecom / js.js文件中就是那样
var x = '1233123';
//some code
问题是警报不起作用。在谷歌Chrome的控制台说
未捕获的ReferenceError:x未定义mypage:31 (匿名函数)
但是,如果我包含这样的外部js文件;
<script src="//mysite.co/js.js" type="text/javascript" ></script>
有效。
但我需要第一种方法......
修复是什么?
感谢。
答案 0 :(得分:1)
当您将脚本标记附加到正文时,它们会尽可能地加载,而不是按顺序加载。这就是为什么要在文档加载完成时添加侦听器的原因。例如,经典的jquery案例 -
$.ready(function () {
alert(x);
});
这应该可行,因为此时已加载脚本标记,并且已定义x
。此外,由于您已经以编程方式添加了脚本标记,因此浏览器将继续使用警告x
的脚本块,而不是等待引用的脚本加载。
编辑 - Javascript - How to detect if document has loaded (IE 7/Firefox 3)
中提到了一种非jquery方式Per @nrabinowitz - http://jsfiddle.net/7br7q/应该表明.ready确实会考虑动态添加的脚本。