Heim Web-Frontend js-Tutorial javascript开发随笔二 动态加载js和文件_javascript技巧

javascript开发随笔二 动态加载js和文件_javascript技巧

May 16, 2016 pm 05:59 PM
动态加载

这时候最好的做法就是按需引入,动态引入组件js和样式,文件load完成后调用callback,运行js。代码还是很简便的
1. 判断文件load完成。加载状态ie为onreadystatechange,其他为onload、onerror

复制代码 代码如下:

if(isie){
Res.onreadystatechange = function(){
if(Res.readyState == 'complete' || Res.readyState == 'loaded'){
Res.onreadystatechange = null;
callback();
_self.loadedUi[modelName] = true;
}
}
}else{
Res.onload = function(){
Res.onload = null;
callback();
_self.loadedUi[modelName] = true;
}
Res.onerror = function(){
throw new Error('res error:' + modelName+'.js');
}
}

2. 所有组件的命名最好保持一致,callback调用也比较方便。还可以根据需要增加参数比如: requires,依赖于那些文件;style,true || false,是否加载样式,等等。
3. 移除操作也可以有,移除script、style标签、delete组件
复制代码 代码如下:

(function(window,undefined){
if(!window.ui) {
window.ui = {};
}
//动态加载ui的js
window.bus = {
config : {
version : window.config.version,
cssPath : window.config.resServer + '/css/v3/ui',
jsPath : window.config.resServer + '/js/v2/ui'
},
loadedUi : {},
readyStateChange : function(){
var ua = navigator.userAgent.toLowerCase();
return ua.indexOf('msie') >= 0;
},
loadRes : function(modelName,prames,callback){
var _self = this;
var Res = document.createElement(prames.tagName);
for(var k in prames){
if(k != 'tagName'){
Res.setAttribute(k,prames[k],0);
}
}
document.getElementsByTagName('head')[0].appendChild(Res);
if(this.readyStateChange()){
Res.onreadystatechange = function(){
if(Res.readyState == 'complete' || Res.readyState == 'loaded'){
Res.onreadystatechange = null;
callback();
_self.loadedUi[modelName] = true;
}
}
}else{
Res.onload = function(){
Res.onload = null;
callback();
_self.loadedUi[modelName] = true;
}
Res.onerror = function(){
throw new Error('res error:' + modelName+'.js');
}
}
},
removeUi : function(modelName){
if(!modelName){
return true
};
this.loadedUi[modelName] = false;
var head = document.getElementsByTagName('head')[0];
var model_js = document.getElementById('J_model_'+modelName + '_js');
var model_css = document.getElementById('J_model_'+modelName + '_css');
if(model_js && model_css){
delete window.ui[modelName];
head.removeChild(model_js);
head.removeChild(model_css);
return true;
}else{
return false;
}
},
loadUi : function(modelName,callback,setting){
if(!modelName){
return true
};
callback = callback || function(){};
if(this.loadedUi[modelName] == true){
callback();
return true
}
var deafult_setting = {
style : true,
js : true,
requires : []
}
for(var key in setting){
deafult_setting[key] = setting[key];
}
deafult_setting['style'] === true && this.loadRes(modelName,{
id : 'J_model_'+modelName + '_css',
name : modelName,
tagName : 'link',
type : 'text/css',
rel : 'stylesheet',
href : this.config.cssPath + '/' + modelName + '.css?v=' + this.config.version
});
deafult_setting['js'] === true && this.loadRes(modelName,{
id : 'J_model_'+modelName + '_js',
name : modelName,
tagName : 'script',
type : 'text/javascript',
src : this.config.jsPath + '/' + modelName + '.js?v=' + this.config.version
},callback);
if(deafult_setting.requires.length > 0){
for(var i=0,len = deafult_setting.requires.length;ithis.loadUi(deafult_setting.requires[i]);
}
}
}
}
})(window)

使用方法
复制代码 代码如下:

// load comment for feed
window.bus.loadUi('new_comment_feed', function(){
window.ui.new_comment_feed($("#J_newsList"));
},{
style : false,
requires:['emoticon','addFriend']
});
// load new yy ui
window.bus.loadUi('yy', function(){
window.ui.yy(options);
},{
style:false,
requires:['emoticon']
});
// load photoLightbox
window.bus.loadUi('photoLightbox', function(){
window.ui.photoLightbox(options.urlAjaxGetFriendPhoto, options.urlCommentOtherPhoto,$("#J_newsList"),options.myUid,options.myName);
});
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Python realisiert das dynamische Laden von Seiten und die asynchrone Anforderungsverarbeitungsfunktionsanalyse einer Headless-Browser-Erfassungsanwendung Python realisiert das dynamische Laden von Seiten und die asynchrone Anforderungsverarbeitungsfunktionsanalyse einer Headless-Browser-Erfassungsanwendung Aug 08, 2023 am 10:16 AM

Python implementiert die dynamischen Lade- und asynchronen Anforderungsverarbeitungsfunktionen von Headless-Browser-Sammelanwendungen. In Webcrawlern ist es manchmal erforderlich, Seiteninhalte zu sammeln, die dynamisches Laden oder asynchrone Anforderungen verwenden. Herkömmliche Crawler-Tools weisen bestimmte Einschränkungen bei der Verarbeitung solcher Seiten auf und können den von JavaScript auf der Seite generierten Inhalt nicht genau abrufen. Die Verwendung eines Headless-Browsers kann dieses Problem lösen. In diesem Artikel wird erläutert, wie Sie mit Python einen Headless-Browser implementieren, um Seiteninhalte mithilfe dynamischen Ladens und asynchroner Anforderungen zu sammeln.

Umgang mit dynamischem Laden und Wechseln von Komponenten in Vue Umgang mit dynamischem Laden und Wechseln von Komponenten in Vue Oct 15, 2023 pm 04:34 PM

Umgang mit dem dynamischen Laden und Wechseln von Komponenten in Vue Vue ist ein beliebtes JavaScript-Framework, das eine Vielzahl flexibler Funktionen zum Umgang mit dem dynamischen Laden und Wechseln von Komponenten bereitstellt. In diesem Artikel besprechen wir einige Methoden zur Handhabung des dynamischen Ladens und Wechselns von Komponenten in Vue und stellen spezifische Codebeispiele bereit. Das dynamische Laden von Komponenten bedeutet das dynamische Laden von Komponenten zur Laufzeit nach Bedarf. Dies verbessert die Leistung und Ladegeschwindigkeit Ihrer Anwendung, da relevante Komponenten nur bei Bedarf geladen werden. Vue bietet Async und AWA

Enthüllung des Hot-Update-Prinzips in Golang: Insider-Erklärung zum dynamischen Laden und Neuladen Enthüllung des Hot-Update-Prinzips in Golang: Insider-Erklärung zum dynamischen Laden und Neuladen Jan 20, 2024 am 10:09 AM

Erkundung des Prinzips von Golang Hot Update: Das Geheimnis des dynamischen Ladens und Neuladens Einführung: Im Bereich der Softwareentwicklung hoffen Programmierer oft, Code ändern und aktualisieren zu können, ohne die Anwendung neu starten zu müssen. Solche Anforderungen sind sowohl für die Entwicklungseffizienz als auch für die Zuverlässigkeit des Systembetriebs von großer Bedeutung. Als moderne Programmiersprache bietet Golang Entwicklern viele praktische Mechanismen zur Implementierung von Hot Updates. Dieser Artikel befasst sich mit den Prinzipien des Golang-Hot-Updates, insbesondere mit den Geheimnissen des dynamischen Ladens und Neuladens, und kombiniert ihn mit spezifischen Codebeispielen.

So erstellen Sie eine Tabelle, die Daten mithilfe von Vue und Element-UI dynamisch lädt So erstellen Sie eine Tabelle, die Daten mithilfe von Vue und Element-UI dynamisch lädt Jul 21, 2023 pm 11:49 PM

So erstellen Sie mit Vue und Element-UI eine Tabelle, die Daten dynamisch lädt. In der modernen Webentwicklung sind Datentabellen eine der häufigsten Schnittstellenkomponenten. Vue.js ist heutzutage ein sehr beliebtes Front-End-Framework, und Element-UI ist eine Reihe von Komponentenbibliotheken, die auf Basis von Vue.js entwickelt wurden und uns einen umfangreichen Satz an UI-Komponenten zur Verfügung stellen. In diesem Artikel wird erläutert, wie Sie mit Vue und Element-UI eine Tabelle erstellen, die Daten dynamisch laden kann, und entsprechende Codebeispiele geben. Zuerst müssen wir installieren

Vue-Fehler beheben: Vue Router kann nicht korrekt verwendet werden, um Komponenten basierend auf Routing-Parametern dynamisch zu laden Vue-Fehler beheben: Vue Router kann nicht korrekt verwendet werden, um Komponenten basierend auf Routing-Parametern dynamisch zu laden Aug 20, 2023 am 08:09 AM

Beheben Sie den Vue-Fehler: VueRouter kann nicht korrekt zum dynamischen Laden von Komponenten basierend auf Routing-Parametern verwendet werden. Bei der Verwendung von VueRouter für Routing-Sprünge müssen wir manchmal Komponenten basierend auf Routing-Parametern dynamisch laden. In einigen Fällen kann jedoch ein häufiger Fehler auftreten: VueRouter kann nicht korrekt verwendet werden, um Komponenten basierend auf Routing-Parametern dynamisch zu laden. In diesem Artikel wird beschrieben, wie Sie diesen Fehler beheben können, und es werden Codebeispiele bereitgestellt. Zunächst müssen wir klarstellen: VueRouter kann bestehen

Verwendung von Reflektion und dynamisches Laden von Assemblys in C# Verwendung von Reflektion und dynamisches Laden von Assemblys in C# Oct 08, 2023 pm 12:12 PM

Verwendung von Reflektion und dynamisches Laden von Assemblys in C# Einführung: In C# ist Reflektion (Reflection) ein leistungsstarker Mechanismus, der es uns ermöglicht, die Metadaten des Programms zur Laufzeit abzurufen und zu verarbeiten, einschließlich Typinformationen, Mitgliedsinformationen usw. Das dynamische Laden von Assemblys ist eine häufige Anwendung, die durch Reflektion implementiert wird, und ist in einigen spezifischen Szenarien sehr nützlich. In diesem Artikel wird die Verwendung von Reflektion und das dynamische Laden von Assemblys in C# im Detail vorgestellt und spezifische Codebeispiele bereitgestellt. Das Grundkonzept der Reflexion Reflexion ist eine wichtige Funktion in der Sprache C#

phpSpider-Praxistipps: Wie gehe ich mit dem dynamischen Laden von Webinhalten um? phpSpider-Praxistipps: Wie gehe ich mit dem dynamischen Laden von Webinhalten um? Jul 22, 2023 am 08:33 AM

phpSpider-Praxistipps: Wie gehe ich mit dem dynamischen Laden von Webinhalten um? Beim Crawlen von Webseitendaten stoßen wir häufig auf das Problem, dass dynamisch geladene Inhalte nicht direkt über den Crawler abgerufen werden können. Bei diesen dynamisch geladenen Inhalten kann es sich um über AJAX-Anfragen erhaltene Daten, über JavaScript gerenderte DOM-Elemente usw. handeln. Um dieses Problem zu lösen, werden in diesem Artikel einige praktische Tipps zum Umgang mit dynamischen Ladeproblemen von Webseiten bei Verwendung von phpSpider vorgestellt. 1. Verwenden Sie Netzwerk-Debugging-Tools, um dynamisch geladene URLs zu finden

Verwenden Sie die Methode „load()' der Klasse „System' in Java, um Klassen oder Ressourcen dynamisch zu laden Verwenden Sie die Methode „load()' der Klasse „System' in Java, um Klassen oder Ressourcen dynamisch zu laden Jul 25, 2023 am 10:25 AM

Verwenden Sie die Methode „load()“ der Systemklasse in Java, um Klassen oder Ressourcen dynamisch zu laden. In der Java-Entwicklung müssen wir manchmal Klassen oder Ressourcen dynamisch laden, während das Programm ausgeführt wird, um einige flexible Funktionen zu erreichen. Um diese Anforderung zu erfüllen, stellt Java die Methode „load()“ der Klasse „System“ bereit. In diesem Artikel wird die Verwendung der Methode „load()“ der Klasse „System“ vorgestellt und entsprechende Codebeispiele bereitgestellt. Lassen Sie uns zunächst die Definition der Methode „load()“ verstehen: publicstaticvo

See all articles