Yipin Sky Web Development Code Station ASP et autres blogs de collection de codes classiques liés au développement Web - Groupe QQ de communication ASP 12814238 (complet) 14725152 (ouvert) Page d'accueil Reconstruction et optimisation ASPJS/AJAX Collecte complète de bases de données de codes et partage du système d'exploitation de divertissement audiovisuel Article précédent | Suivant Un article JS/AJAX
Comment transmettre des paramètres aux fichiers JavaScript dans JavaScript Auteur : Yipin Date : 23/03/2009
Taille de la police : petite, moyenne,
grande
. C'est la manière la plus simple d'utiliser des variables globales, telles que Google Adsense :
code de programme
<script type="text/javascript">
google_ad_client = 'pub-3741595817388494';
</script>
<script type="text/javascript" src=" http://pagead2 .
googlesyndication.com/pagead/show_ads.js"></script>
L'inconvénient est que des variables globales sont introduites. Il existe deux variantes sur la manière d'introduire des fichiers :
code de programme
// Variante 1 : Utilisez document.write pour afficher
<script type="text/javascript">
google_ga_id = 'g6u7un8646xx';
document.write(unescape('%3Cscript type="text/javascript" src=
" http://www.google-analytics.com/ga.js"%3E%3C/script%3E' ));
</script>
code de programme
// Variation 2 : Utiliser l'opération DOM pour ajouter à la tête
<script type="text/javascript">
G_BEACON_ATP = 'category=&userid=&channel=112ad_id=';
document.getElementsByTagName('head')[0].appendChild(document.
createElement('script')).src='http://taobao.com/atp.js';
</script>
Remarque : le code ci-dessus est un code de démonstration virtuelle basé sur une application réelle
. Remarque : la variante 1 est utilisée dans de nombreuses applications. Les méthodes d'écriture courantes sont les suivantes :
code de programme
<script type="text/javascript">
// Échappe-toi directement :
document.write('<script type="text/javascript" src="test.js"></script>');
// Ou aimer la page d'accueil de Yahoo!
document.write('<scr' + 'ipt type="text/javascript" src="test.js"></scr' + 'ipt>');
</script>
2.
Par rapport à l'obtention et à l'analyse du src de l'élément de script et de toutes les variables, nous préférons passer les paramètres comme suit :
code de programme
<script type="text/javascript" src="test.js?a=b&c=d"></script>
Le problème principal est de savoir comment obtenir l'attribut src.
La première méthode consiste à ajouter l'attribut id au script, à obtenir le script actuel via l'identifiant, puis à utiliser des expressions régulières pour extraire les paramètres de src. L'inconvénient est que dans la spécification HTML 4.01, l'élément SCRIPT n'a pas d'attribut id. Cette lacune n’en est pas une. Après tout, il vaut mieux croire aux normes que ne pas en avoir.
La deuxième méthode consiste à utiliser le nom du fichier js comme hook.Après avoir passé document.getElementsByTagName('script') dans le code js, le fichier js actuel correspond aux règles normales. Cette méthode est très orthodoxe, mais nécessite un nom de fichier unique. L'inconvénient est qu'il y a beaucoup de code, qu'il n'est pas raffiné et qu'il a un léger impact sur les performances.
La troisième méthode consiste simplement à ajouter des données d'attribut personnalisées basées sur la première méthode :
code de programme
<script id="testScript" type="text/javascript" src="test.js" data="a=b&c=d"></script>
Dans le fichier test.js, les paramètres transmis sont obtenus via la ligne suivante :
code de programme
var scriptArgs = document.getElementById('testScript').getAttribute('data');
La quatrième méthode consiste à utiliser le mécanisme d'exécution séquentielle de js (le fichier js peut être chargé de manière synchrone ou asynchrone, mais une fois exécuté, il doit être exécuté dans l'ordre du flux de documents). Lorsqu'un fichier js est exécuté, il doit être le dernier parmi les fichiers js "chargés" :
code de programme
var scripts = document.getElementsByTagName('script');
var currentScript = scripts[scripts.length - 1];
La quatrième méthode est plus adroite et plus géniale que la deuxième méthode.
En termes de simplification du code et de performances, Méthode 3>Méthode 1>Méthode 4>Méthode 2
Résumé : Si vous vous souciez des standards, je vous recommande la méthode 4 si comme moi vous estimez qu'il n'est pas nécessaire de se conformer pleinement aux standards, méthode ; 3 est recommandé.
3. Plan d'inspiration Si vous êtes un fan fidèle de John Resig comme moi, vous vous souvenez peut-être encore des "Degrading Script Tags" qui ont été très discutés en août de l'année dernière. John Resig nous a ouvert la porte de l'imagination. Pour le problème de cet article, les « mauvaises voies » suivantes peuvent également être utilisées pour y parvenir :
code de programme
<script type="text/javascript" src="test.js">
TB.SomeApp.scriptArgs = 'a=b&c=d';
</script>
Dans le fichier test.js :
code de programme
TB = {} ; TB.UneApp = {} ;
var scripts = document.getElementsByTagName("script");
eval(scripts[scripts.length - 1].innerHTML);
Ceci stocke les paramètres dans la variable TB.SomeApp.scriptArgs.
Lorsqu’il n’y a pas beaucoup de paramètres, vous pouvez même faire ceci :
code de programme
<script type="text/javascript" src="test.js">a=b&c=d</script>
fichier js :
code de programme
var scripts = document.getElementsByTagName("script");
var scriptArgs = scripts[ scripts.length - 1 ].innerHTML.replace(/[s]/g, '');
L'imagination est infinie, vous pouvez également utiliser onload :
code de programme
<script type="text/javascript" src="test.js" xxxxx="TB.SomeFun('a=b&c=d')"></script>
Définissez simplement la fonction dans le fichier js :
code de programme
TB = {} ;
TB.SomeFun = function(arg) { //code};
Le code ci-dessus peut s'exécuter correctement sous les navigateurs non-IE. Pour être stupide, il faut ajouter quelques lignes de code :
code de programme
si (fenêtre.ActiveXObject) {
var scripts = document.getElementsByTagName('script');
eval(scripts[scripts.length - 1].getAttribute('onload'));
}
Tant que nous continuons à perpétuer l'esprit de fouille, je pense qu'il y aura des solutions plus inspirantes -.-
Après avoir résumé les solutions ci-dessus, quelle solution est la meilleure ? Ma réponse est : il n’y a pas de meilleur, seulement le plus adapté ! Parce que pour différentes applications et différents concepts, la définition du « bien » est différente.
Par exemple, ma philosophie actuelle est qu'il n'est pas nécessaire de se conformer pleinement aux normes. En ce qui concerne les variables globales, ce que nous devons éviter, c'est l'abus et non l'utilisation. Par conséquent, je choisirai la solution de variable globale, qui est la plus simple et la plus performante.