理解添加包含javascript资源的html时的JS加载
我最近在附加一个包含理解添加包含javascript资源的html时的JS加载,javascript,Javascript,我最近在附加一个包含的HTML块时遇到了一个问题,这让我摸不着头脑。我创建了一个示例来说明这个问题(或者我应该说我对JS的理解很差) 将下面的html块添加到页面时,脚本“gHnukrbe.js”的实际加载和执行似乎会延迟。加载的脚本是一个“jwplayer cloud player”,它定义函数jwplayer。当代码被执行时,它输出是否声明了jwplayer?未定义 <div id="output"> <script type="text/javascript"
的HTML块时遇到了一个问题,这让我摸不着头脑。我创建了一个示例来说明这个问题(或者我应该说我对JS的理解很差)
将下面的html块添加到页面时,脚本“gHnukrbe.js”的实际加载和执行似乎会延迟。加载的脚本是一个“jwplayer cloud player”,它定义函数jwplayer
。当代码被执行时,它输出是否声明了jwplayer?未定义
<div id="output">
<script type="text/javascript"
src="https://cdn.jwplayer.com/libraries/gHnukrbe.js"></script>
<script>
$("#output").append("<p>is jwplayer declared? " + typeof jwplayer + "</p>");
</script>
</div>
所以我试图弄清楚浏览器在这种情况下是如何加载脚本的,因为我有这样的印象,解析器会在执行任何其他javascript之前停止加载JS文件,但现在它显然正在这样做
(欢迎提供带有更深入解释链接的最少答案!)
编辑
更神秘的是,如果JS文件托管在加载页面的同一台服务器上,那么这个问题就不会出现。不幸的是,我无法在JSFIDLE上显示这一点
默认情况下,动态创建并添加到文档中的脚本是异步的,它们不会阻止呈现并在下载时立即执行,这意味着它们可能以错误的顺序出现
我们可以显式地将它们标记为非异步。但是,添加async='false'
不起作用。就像
不会取消选中该框一样。您必须以编程方式创建脚本元素,而不是附加一块HTML
完整解释如下:Hi@Augusto,正如David Lin指出的,现在刚刚尝试过,将
async
属性设置为false
对于加载页面后插入的脚本元素似乎不起作用。所以我删除了我的答案。这是一个很好的答案:D。非常感谢你花时间和精力来回答它!!!-非常感谢!谢谢你,大卫。在发布这个问题之前,我确实快速浏览了一下那个页面,但由于它在2013年发布,我认为它“过时”了。。。但在浏览器世界中,JS加载看起来仍然有点混乱。再次感谢!
setTimeout(function() {
$("#output")
.append("<p>is jwplayer declared T+5s? " + typeof jwplayer + "</p>");
}, 5000);