Javascript angularjs是否在jQuery的回退中加载?
在下面的代码中Javascript angularjs是否在jQuery的回退中加载?,javascript,jquery,html,angularjs,Javascript,Jquery,Html,Angularjs,在下面的代码中 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Falback procedure</title> <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.m
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Falback procedure</title>
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">
</script>
<script type="text/javascript">
if(typeof jQuery === 'undefined')
document.write('<script type="text/javascript" src="../localfolder/jquery.js"></script>');
</script>
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/2.0.0-beta.0/angular2.js">
</script>
</head>
<body>
<p>Hello</p>
</body>
</html>
后退程序
if(typeof jQuery==‘未定义’)
文件。写(“”);
你好
考虑一个场景,其中GoogleCDN存在reach能力问题,触发了加载本地jQuery库(位于Web服务器中)的回退机制
在这种情况下,angularjs库是否被加载?执行
document.write
后,该代码有两个问题,可能会使其行为不符合预期:
。不管它是否在字符串中,它都会终止它所在的块。必须将其拆分,以便浏览器不会将其视为块的结尾:
<script type="text/javascript">
if(typeof jQuery === 'undefined')
document.write('<script type="text/javascript" src="../localfolder/jquery.js"><\/script>');
// Note the \------------------------------------------------------------------^
</script>
document.write
是否是异步执行
不,它在函数运行时立即发生。在您的情况下,由于函数位于脚本
标记的顶层,没有特殊属性,因此HTML解析器必须尖声停止并运行该JavaScript代码,处理JavaScript代码通过document.write输出的任何标记,等待JavaScript代码完成,然后再转到角度部分
浏览器可能能够提前扫描以预加载angular.js
文件,但在解析器到达该文件的script
标记之前,它不会执行该文件的内容,因为脚本的执行顺序定义良好(例如,文档顺序)除非您使用async
或defer
属性。该代码存在两个问题,可能会使其行为不符合预期:
脚本块中有一个文本
。不管它是否在字符串中,它都会终止它所在的块。必须将其拆分,以便浏览器不会将其视为块的结尾:
<script type="text/javascript">
if(typeof jQuery === 'undefined')
document.write('<script type="text/javascript" src="../localfolder/jquery.js"><\/script>');
// Note the \------------------------------------------------------------------^
</script>
你在评论中问道
我想知道document.write
是否是异步执行
不,它在函数运行时立即发生。在您的情况下,由于函数位于脚本
标记的顶层,没有特殊属性,因此HTML解析器必须尖声停止并运行该JavaScript代码,处理JavaScript代码通过document.write输出的任何标记,等待JavaScript代码完成,然后再转到角度部分
浏览器可能能够提前扫描以预加载angular.js
文件,但在解析器到达该文件的script
标记之前,它不会执行该文件的内容,因为脚本的执行顺序定义良好(例如,文档顺序)除非您使用async
或defer
属性。为什么不加载它?Angularjs
和jquery
是从不同的cdn
加载的,Angularjs
不需要jquery.js
工作,或者更好地说,Angularjs
不依赖于jquery.js
。如果你的问题是关于document.write()
调用是否会有问题,答案是否定的。@Pointy我想知道,document.write
是否是异步执行,不能阻止页面下方的脚本。@overexchange不,不是。它将立即添加
标记,然后浏览器要做的下一件事就是加载该脚本(jQuery,从您的服务器)并对其进行评估。然后它将转到角度导入。为什么不加载呢?Angularjs
和jquery
是从不同的cdn
加载的,Angularjs
不需要jquery.js
工作,或者说Angularjs
不依赖于jquery.js
。如果你的问题是关于document.write()
调用是否会有问题,答案是否定的。@Pointy我想知道document.write
是否是异步执行,不能阻止页面下方的脚本。@overexchange不,不是。它将立即添加
标记,然后浏览器要做的下一件事就是加载该脚本(jQuery,从您的服务器)并对其进行评估。然后它将转到角度导入。