Javascript 如何识别加载的一个js文件?
我尝试在页面加载时显示进度条。我想在加载js文件后更改进度条的宽度。在最终加载所有文档后,将进度条的宽度设置为100%。现在我需要识别使用javascript加载的js文件。Javascript 如何识别加载的一个js文件?,javascript,onload,Javascript,Onload,我尝试在页面加载时显示进度条。我想在加载js文件后更改进度条的宽度。在最终加载所有文档后,将进度条的宽度设置为100%。现在我需要识别使用javascript加载的js文件。 这可能吗?请注意。对于内部js文件加载识别: 由于可以从其他文件访问函数和变量,因此可以通过调用函数来设置全局进度变量的值并显示其值 //on page or head js file var progress = 0; function displayProgress() { //show progress based
这可能吗?请注意。对于内部js文件加载识别: 由于可以从其他文件访问函数和变量,因此可以通过调用函数来设置全局进度变量的值并显示其值
//on page or head js file
var progress = 0;
function displayProgress()
{
//show progress based on 'progress' variable
}
//file1.js
progress += 10;
displayProgress();
...
//file2.js
progress += 20;
displayProgress();
...
对于外部js文件,这是很好的。其主要思想是定期检查是否存在外部函数(typeoffixpng==“function”
),如果存在,则停止检查并显示进度
下面是用
传入的回调:
function loadExtScript(src, callback) { var s = document.createElement('script'); s.src = src; document.body.appendChild(s); // if loaded...call the callback }
Firefox允许您监听脚本上的onload事件
要素:
s.onload=回调代码>
使用Internet Explorer,您可以等待脚本上的状态更改
要素:
s.onreadystatechange=function(){if(this.readyState!=“已加载”
)return;callback.call();}
Safari的问题是——Safari没有事件更改,所以
我们无法判断脚本何时加载。这就是我提出的解决方案
提出(此解决方案也应适用于Opera):
该函数将测试作为参数。既然你是设计师
对于应用程序,您将知道什么是成功测试。一旦测试成功
如果为true,它将执行回调。一个简单的测试就是检查
函数是否存在,例如:
loadExtScript('/fixpng.js', function() { return (typeof fixpng ==
'function'); }, myCallbackFunction);
对于内部js文件加载识别:
由于可以从其他文件访问函数和变量,因此可以通过调用函数来设置全局进度变量的值并显示其值
//on page or head js file
var progress = 0;
function displayProgress()
{
//show progress based on 'progress' variable
}
//file1.js
progress += 10;
displayProgress();
...
//file2.js
progress += 20;
displayProgress();
...
对于外部js文件,这是很好的。其主要思想是定期检查是否存在外部函数(typeoffixpng==“function”
),如果存在,则停止检查并显示进度
下面是用
传入的回调:
function loadExtScript(src, callback) { var s = document.createElement('script'); s.src = src; document.body.appendChild(s); // if loaded...call the callback }
Firefox允许您监听脚本上的onload事件
要素:
s.onload=回调代码>
使用Internet Explorer,您可以等待脚本上的状态更改
要素:
s.onreadystatechange=function(){if(this.readyState!=“已加载”
)return;callback.call();}
Safari的问题是——Safari没有事件更改,所以
我们无法判断脚本何时加载。这就是我提出的解决方案
提出(此解决方案也应适用于Opera):
该函数将测试作为参数。既然你是设计师
对于应用程序,您将知道什么是成功测试。一旦测试成功
如果为true,它将执行回调。一个简单的测试就是检查
函数是否存在,例如:
loadExtScript('/fixpng.js', function() { return (typeof fixpng ==
'function'); }, myCallbackFunction);
如果您知道至少一个已定义的命名空间(几乎所有库和插件都有:例如jQuery、jQuery.ui、jQuery.mobile、toastr、DataTable等)或正在加载的脚本文件引入的一个全局变量名,则可以执行以下操作:
(function(undefined) {
var scriptFilesLoaded = false,
files = [],
timer = setInterval(function(){
try {
files = [
jQuery,
jQuery.mobile,
jQuery.ui,
someGlobalVariableName
];
if(files.indexOf(undefined)<0){
scriptFilesLoaded = true;
clearInterval(timer);
}
}
catch(e) {
console.warn('Preloader in action: Script files not loaded yet.');
}
},200);
})();
(函数(未定义){
var scriptfilesload=false,
文件=[],
计时器=设置间隔(函数(){
试一试{
文件=[
jQuery,
jQuery.mobile,
jQuery.ui,
半球形变形虫
];
如果(files.indexOf(undefined)如果您知道至少有一个已定义的名称空间(几乎所有库和插件都有它:例如jQuery、jQuery.ui、jQuery.mobile、toastr、DataTable等)或正在加载的脚本文件引入的一个全局变量名,则可以执行以下操作:
(function(undefined) {
var scriptFilesLoaded = false,
files = [],
timer = setInterval(function(){
try {
files = [
jQuery,
jQuery.mobile,
jQuery.ui,
someGlobalVariableName
];
if(files.indexOf(undefined)<0){
scriptFilesLoaded = true;
clearInterval(timer);
}
}
catch(e) {
console.warn('Preloader in action: Script files not loaded yet.');
}
},200);
})();
(函数(未定义){
var scriptfilesload=false,
文件=[],
计时器=设置间隔(函数(){
试一试{
文件=[
jQuery,
jQuery.mobile,
jQuery.ui,
半球形变形虫
];
if(files.indexOf(未定义)用代码解释你自己你只是想检测正在加载的文件,还是想检测正在完成的文件中排队的函数?如果是前者,Mikhail提供了一个粗略的示例,说明你可以基于此进行构建。用代码解释你自己你只是想检测正在加载的文件,还是想检测正在加载的文件在那些正在完成的文件中排队的函数?如果是前者,Mikhail提供了一个粗略的示例,说明您可以基于它进行构建。问题是脚本文件可能是外部资源,因为如果它们不是,它们应该或多或少地合并到一个文件中。当然,我们对环境的了解还不够更新了我对内部和外部js文件的回答问题在于,脚本文件可能是外部资源,因为如果不是,它们应该或多或少地合并到一个文件中。当然,我们对环境的了解还不够,所以不能肯定地说……更新了我对内部和外部js文件的回答js文件