Javascript 全局变量不';脚本标记中外部.js文件之后的nt工作
下面是我的javascript代码:Javascript 全局变量不';脚本标记中外部.js文件之后的nt工作,javascript,Javascript,下面是我的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> 问题是警报不起作用。在谷歌chrome的控制台上说 未捕获引用
<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>
问题是警报不起作用。在谷歌chrome的控制台上说
未捕获引用错误:x未定义mypage:31
(匿名函数)
但如果我包括像这样的外部js文件
<script src="//mysite.co/js.js" type="text/javascript" ></script>
它起作用了
但是我需要第一种方法
解决办法是什么
谢谢。当您将脚本标记附加到正文时,它们会尽可能地加载,而不是按顺序加载。这就是为什么要在文档加载完成时添加侦听器。例如,经典的jquery案例-
$.ready(function () {
alert(x);
});
这应该可以工作,因为此时已加载脚本标记,并且已定义了x
。此外,由于您已通过编程方式添加了脚本标记,浏览器将继续使用向x
发出警报的脚本块,而不是等待加载引用的脚本
Edit-中提到了一种非jquery的方法
Per@nrabinowitz-应该说明这一点。ready确实会考虑动态添加的脚本。当您将脚本标记附加到正文时,它们会尽可能地加载,而不是按顺序加载。这就是为什么要在文档加载完成时添加侦听器。例如,经典的jquery案例-
$.ready(function () {
alert(x);
});
这应该可以工作,因为此时已加载脚本标记,并且已定义了x
。此外,由于您已通过编程方式添加了脚本标记,浏览器将继续使用向x
发出警报的脚本块,而不是等待加载引用的脚本
Edit-中提到了一种非jquery的方法
Per@nrabinowitz-应该表明。ready确实会考虑动态添加的脚本。会
$。ready
实际上会等待动态添加的标记?这个答案的关键点是硬编码的脚本标记会按顺序加载,但动态添加的脚本标记会异步加载,他们的内容将不会立即提供。谢谢回复。但是,谷歌分析是如何做到这一点的?而且它是一个多站点项目,所以我不能使用jquery。@有一天-代码非常非常简单。看看我在答案中链接的答案。你可以做类似的事情。@Stephen我需要一个简单的电话。我还想在我的页面上的任何地方像谷歌分析那样做。我看到了你的链接。我开始警觉起来。但要提醒,我必须编写readyStateCheckInterval。有什么简单的方法可以做到这一点吗?Will$。ready
实际上会等待动态附加的标记吗?这个答案的关键点是硬编码的脚本标记会按顺序加载,但动态附加的脚本标记会异步加载,并且它们的内容不会立即可用。感谢您的回复。但是,谷歌分析是如何做到这一点的?而且它是一个多站点项目,所以我不能使用jquery。@有一天-代码非常非常简单。看看我在答案中链接的答案。你可以做类似的事情。@Stephen我需要一个简单的电话。我还想在我的页面上的任何地方像谷歌分析那样做。我看到了你的链接。我开始警觉起来。但要提醒,我必须编写readyStateCheckInterval。有什么简单的方法可以做到这一点吗?