2015-09-24 1 views
0

J'ai créé une bibliothèque JavaScript et l'ai compressée avec les options suivantes: Shrink Variables et Base62 Encoded à l'adresse suivante: http://dean.edwards.name/packer/. Dans cette bibliothèque, j'ai déclaré un objet ax, mais lorsque j'utilise la version condensée dans ma page Web, j'obtiens une erreur en disant Uncaught ReferenceError: ax is not defined.Un objet disparaît après l'insertion d'une bibliothèque JavaScript

Le code original de cette bibliothèque ressemble à ci-dessous.

var ax = { 
    scaleUp:function(win) { 
      //code omitted 
     }, 
downGrade:function(win) { 
     //code omitted 
    } 
} 

Dans ma page Web dans laquelle j'utilise cette bibliothèque, j'ai le code comme ci-dessous. Ce code fonctionne, si au lieu d'emballer, je le minimise en utilisant le Minifieur de Microsoft ou simplement utiliser la bibliothèque JavaScript originale sans minification ou emballage.

var result = ax.downGrade(w); 

Question: Pourquoi la ax variable ne accessible avec la version tassée? Dois-je ajouter quelque chose d'autre lorsque j'utilise la version condensée?

MISE À JOUR 1:

je ne pouvais pas obtenir le fichier compressé pour travailler mais emballer mon code par un autre utilitaire de compression à l'URL suivante travaillé dans mon cas: http://jsutility.pjoneil.net/. Il a fourni une compression tout aussi bonne. Je ne suis toujours pas sûr pourquoi l'utilitaire à l'URL d'origine n'a pas réussi à produire une version de travail de ma bibliothèque, même si mon code original fonctionne sans aucune erreur sur aucune page Web.

+1

Regardez le code JavaScript compressé et déterminez où 'ax' est parti. Vous n'avez fourni aucun code reproduisant le problème, nous ne pouvons donc pas vous aider. – meagar

+0

Comment liez-vous le script emballé? – Jasen

+0

Ma bibliothèque est énorme avec une taille d'environ 56 Ko dans son état d'origine et environ 16 Ko dans un état compacté. C'est pourquoi je n'ai pas fourni ma bibliothèque, mais il y a un code comme celui que j'ai posté ici. – Sunil

Répondre

1

Vérifiez votre console pour les erreurs avant d'essayer d'appeler ax. Placez explicitement les points-virgules où ils appartiennent. Exemple à la fin de la définition pour ax vous devriez mettre un point-virgule, même si dans le code standard c'est bon tel quel. Supprimez les déclarations explicites var. Quand je l'ai fait ces choses:

ax = { 
    scaleUp:function(win) { 
      alert("up"); 
     }, 
downGrade:function(win) { 
     alert("down"); 
    } 
}; 
result = ax.downGrade(); 

parcouriez question dans jsFiddle et la console: http://jsfiddle.net/7kdnw65n/. Je soupçonne que cela a à voir avec la façon dont l'algorithme "réduit" les variables. Le pack résultant était:

eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0={5:1(2){3("6")},4:1(2){3("7")}};8=0.4();',9,9,'ax|function|a|alert|downGrade|scaleUp|up|down|result'.split('|'),0,{})) 
+0

Ok. Je vais essayer vos suggestions et vous le faire savoir. – Sunil

+0

J'ai essayé toutes vos suggestions, mais toujours la même erreur. J'utilise le fichier packed dans asp.net en utilisant cette balise: