2011-08-15 3 views
0

J'ai un fichier JavaScript principal, nous appellerons core.js que d'autres fichiers dépendent.Déterminer si un fichier JavaScript dépendant a été inclus

En core.js je suis un objet qui la définition sera nécessaire pour exister dans les fichiers dépendants.

core.js:

(function(){ 
/* base package */ 
var core = window.core = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw new Error("A package cannot be instantiated"); 
}; 
})(); 

utils.js

/* utils package */ 
core.utils = function() { 
    // Throw an error, the core package cannot be instantiated. 
    throw("A package cannot be instantiated"); 
}; 

/** 
* Utility: StringUtils 
*/ 
core.utils.StringUtils = new Object(); 
core.utils.StringUtils.prototype = { 

    /** 
    * ltrim - Removes preceding whitespaces 
    */ 
    ltrim: function(value) { 
     var re = /\s*((\S+\s*)*)/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * rtrim - Removes succeeding whitespaces 
    */ 
    rtrim: function(value) { 
     var re = /((\s*\S+)*)\s*/; 
     return value.replace(re, "$1"); 

    }, 

    /** 
    * trim - Removes preceding and succeeding whitespaces 
    */ 
    trim: function(value) { 
     return core.StringUtils.ltrim(core.StringUtils.rtrim(value)); 
    } 
}; 

Actuellement, je suis d'ajouter une étiquette d'identification à la balise <script />

<script id="core.js" src="core.js" type="text/javascript"></script> 

et vérification c'est existen ce avant de définir de nouveaux éléments dans l'objet core.

(function() { 
    if (typeof (core) == 'undefined') { 
     var script = document.getElementById("core.js"); 
     if (script == null) 
      throw ("core.js is missing."); 
     else 
      throw ("Unknown Exception. core is undefined."); 
    } 
})(); 

Suis-je concerné avec la compatibilité du navigateur croix? Il fonctionne actuellement dans IE9 et FF5, mais je veux m'assurer qu'il fonctionne pour tous les navigateurs.

Y at-il une alternative/meilleure façon de déterminer si un fichier a été inclus ou non?

+1

variante A « pas cher » est de définir une variable sentinelle: 'var = core_is_loaded true' dans le « doit être inclus » fichier et la vérification de l'existence de cette var et ayant une valeur appropriée. –

+1

Pas vraiment une réponse, mais pourquoi faire des fonctions core, core.utils etc. si vous ne voulez pas qu'elles soient instanciées? Objet simple ne fera pas? –

+0

@Chetan Le motif de conception est basé sur le chapitre 3 de «JavaScript pratique, scripts DOM et projets Ajax» de Frank Zammetti. Pour une gestion correcte des erreurs, je voulais lancer une erreur qui permettait à quiconque utilisant le script de savoir ce qu'il avait mal fait, au lieu du générique "Objet ne supporte pas cette action". – Utilitron

Répondre

1

Cela fonctionnera bien, puisque <script> tags sont synchrones tous les Javascript après que cette balise aura accès à core. Si vous voulez une autre méthode pour faire la même chose, vous pouvez prendre la suggestion de Marc B et mettre un drapeau dans core.js. Le drapeau peut également faire partie de l'objet principal, comme core.is_loaded = true; Ensuite, vous n'avez qu'à cocher if(core.is_loaded) dans vos autres fichiers.

+0

Je veux rester loin d'ajouter des drapeaux à l'intérieur du noyau dans le cas où le noyau a lancé une erreur ou n'est pas devenu instancié. Si core existe, core.js doit avoir été chargé. Cependant, si le noyau n'existe pas, il y a plus d'une raison pour laquelle 'core.js n'est pas chargé' – Utilitron

Questions connexes