先加载一个外部javascript文件,然后再加载另一个
Load an external javascript file before another?
我的html页面中有两个外部javascript文件。
我需要确保第一个文件script1.js在我的第二个脚本script2.js.之前运行
我把它们放在我的html页面的主体中;如何确保在运行script1中的函数之前不使用script2?
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<!-- Script 1 -->
<script src="js/script1.js"></script>
<!-- Script 2 -->
<script src="js/script2.js"></script>
</body>
</html>
浏览器将按照找到脚本的顺序执行脚本。如果调用外部脚本,它将阻塞页面,直到加载并执行该脚本为止。
所以如果你的代码是:
<body>
<!-- Script 1 -->
<script src="js/script1.js"></script>
<!-- Script 2 -->
<script src="js/script2.js"></script>
</body>
脚本1将在脚本2之前运行。
<script>
标签为您管理它。。。但是继续阅读…
JavaScript是同步的,这意味着默认情况下它将逐行执行。。。
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<!-- Script 1 -->
<script src="js/script1.js"></script> <!-- first gets executed and get finished -->
<!-- Script 2 -->
<script src="js/script2.js"></script> <!-- then second gets executed and get finished -->
</body>
</html>
但同时JavaScript也可能是异步的。。。
因此,<script>
标签有一个属性使加载异步。。。脚本标记上的async
属性。。。
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<!-- Script 1 -->
<script src="js/script1.js" async></script> <!-- load asynchronously -->
<!-- Script 2 -->
<script src="js/script2.js" async></script> <!-- load asynchronously -->
</body>
</html>
定义和用法
异步属性是一个布尔属性。当存在时,它指定将执行脚本一旦可用,就立即异步发送。
注意:async属性仅用于外部脚本(只有在src属性存在的情况下才应使用)
注意:有几种方式可以执行外部脚本:
如果存在async:脚本与页面的其余部分(脚本将在页面继续时执行解析)如果async不存在并且defer存在:脚本在页面完成解析时执行如果既不是async也不是defer存在:脚本被立即获取并执行,在浏览器继续解析页面之前
您无法检查它是否正在运行。您只能使用jQuery观察加载,并在第二个脚本完成时附加它。
HTML:
<script id="first" src="js/script1.js"></script>
JS:
$("#first").on("load", function() {
$("head").append('<script src="js/script2.js"></script>');
});
为了确保以正确的方式加载所有脚本,您必须使用一些依赖关系处理库,如RequireJS,允许您在正确加载声明的依赖关系时执行代码。
如果你愿意,你可以自己使用jQuery.getScript之类的东西来完成,或者用所有的javascript来完成。
我知道您使用的是javascript,但如果您有jQuery,您可以使用(2)document.ready
函数,并加载这些脚本文件。每个document.ready
将(使用deferred
)对每个进行排队。
$(function() { // same as document.ready
$.getScript('script1.js');
});
$(function() {
$.getScript('script2.js');
});
取自:
多个$(文档)就绪功能
如何在jquery mobile/phonegap 的$(document).ready()/onDeviceReady()上加载脚本
function loadJS(file) {
// DOM: Create the script element
var jsElm = document.createElement("script");
// set the type attribute
jsElm.type = "application/javascript";
// make the script element load file
jsElm.src = file;
// finally insert the element to the body element in order to load the script
document.body.appendChild(jsElm);
}
myScript.src = 'http://code.jquery.com/jquery-2.1.4.min.js';
myScript.onload = function() {
loadJS("js/script2.js")
};
您的第一个脚本添加了新函数
function firstScriptFunction(){
//i have done nothing here
}
您的Html页面
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<!-- Script 1 -->
<script src="js/script1.js"></script>
<!-- Script to load script 2 -- >
<script type="text/javascript">
function loadSecondScript() {
if (!(typeof firstScriptFunction == 'function')) {
window.setTimeout(loadSecondScript, 3000);
}
else {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'js/script2.js';
document.getElementsByTagName('body')[0].appendChild(script);
}
}
$(document).ready(function(){
loadSecondScript();
});
</script>
</body>
</html>
您可以使用jquery并尝试以下操作参考-https://api.jquery.com/jquery.getscript/
$.getScript("js/script1.js", function() {
console.log("script 1 loaded");
$.getScript("js/script2.js", function() {
console.log("script 2 loaded");
});
});
- 加载文件,然后调用回调函数
- 根据浏览器大小加载文件
- 错误:无法在“XMLHttpRequest”上执行“发送”:无法加载“文件”:AngularJS SPA
- Ajax在mootools中使用来加载文件
- 加载文件时xmlhttp不稳定,如何修复
- Require.js何时加载文件
- 有没有办法在不打包的情况下在 nodejs 上加载文件
- 如何通过从浏览器 js 控制台触发的 require.js 重新加载文件
- 使用jQuery加载文件,计算类的元素并设置间隔比率
- 如何在 AngularJS UI 路由器中从bower_component加载文件
- JavaScript 本地应用程序保存/加载文件
- 如何在特定页面上加载文件
- 内容安全策略不从本地主机加载文件
- Javascript 无法从其他目录加载文件
- Extjs MVC 文件夹结构无法加载文件
- 节点.js - 在运行时加载文件
- nodejs加载文件
- Javascript/AAJAX仅重新加载文件“;onchange”;
- 加载文件,并在特定行之后删除javascript/jquery中的所有剩余行
- 是否可以在非服务页面上使用JS/HTML5 FileReader加载文件