Maison >interface Web >js tutoriel >Passer des paramètres aux fichiers js (explication détaillée)_compétences javascript
1. Utiliser des variables globales
C'est le moyen le plus simple, comme Google Adsense :
L'inconvénient est que des variables globales sont introduites. Il existe deux variantes pour introduire les fichiers :
// 变体1:用document.write输出 <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> // 变体2:用DOM操作append到head里 <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 : la variante 1 a de nombreuses applications. Les méthodes d'écriture courantes sont les suivantes :
<script type="text/javascript"> // 直接转义即可: document.write('<script type="text/javascript" src="test.js"></script>'); // 或者像Yahoo!首页一样: document.write('<scr'+'ipt type="text/javascript" src="test.js"></scr'+'ipt>'); </script>
2. Obtenez et analysez le src de l'élément de script
Par rapport à toutes les variables, nous préférons transmettre des paramètres comme les suivants :
13ae44ffe4aa4df7af013a12fb8158d82cacc6d41bbb37262a98f745aa00fbf0
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 méthode 2 consiste à utiliser le nom du fichier js comme hook. Après avoir passé document.getElementsByTagName('script') dans le code js, le fichier js actuel sera mis en correspondance par l'expression régulière. 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 est basée sur la première méthode, ajoutez simplement des données d'attribut personnalisées :
94c14f1ae29f3592bfda9eb585dbd14b2cacc6d41bbb37262a98f745aa00fbf0
Dans le fichier test.js, récupérez les paramètres entrants via la ligne suivante :
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 conforme à l'exécution séquentielle dans le flux de documents). Lorsqu'un fichier js est exécuté, il doit être le dernier parmi les fichiers js "chargés" :
var scripts = document.getElementsByTagName('script'); var currentScript = scripts[scripts.length - 1]; La méthode 4 est plus intelligente et géniale que la méthode 2.
En termes de simplification et de performances du code, méthode trois > méthode un > méthode quatre >
Résumé : Si vous vous souciez des normes, nous recommandons la quatrième méthode ; si, comme moi, vous ne ressentez pas le besoin de vous conformer pleinement aux normes, nous recommandons la troisième méthode.
Écrire un programme de test
<!DOCTYPE html> <html> <script src="a2.js"> </script> <script src="a2.js"> </script> <script src="a2.js"> </script> </html>
var scripts = document.getElementsByTagName('script'); var currentScript = scripts.length;alert(currentScript);
Imprimer séparément
1 2 3
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 une porte d'imagination Pour le problème de cet article, nous pouvons également utiliser les « mauvaises voies » suivantes pour le résoudre :ae47fa971796540d6040c77d18703721 TB.SomeApp.scriptArgs ='a=b&c=d' 2cacc6d41bbb37262a98f745aa00fbf0
Dans le fichier test.js :
TB = {}; TB.SomeApp = {}; var scripts = document.getElementsByTagName("script"); eval(scripts[ scripts.length - 1 ].innerHTML);
Quand il n'y a pas beaucoup de paramètres, vous pouvez même faire ceci :
ae47fa971796540d6040c77d18703721a=b&c=d2cacc6d41bbb37262a98f745aa00fbf0
Dans le fichier js :
var scripts = document.getElementsByTagName("script"); var scriptArgs = scripts[ scripts.length - 1 ].innerHTML.replace(/[s]/g, '');
3959d0a17b69883088dd6228aa01b50a2cacc6d41bbb37262a98f745aa00fbf0
Définissez simplement la fonction dans le fichier js :
TB = {}; TB.SomeFun = function(arg) { //code };
if(window.ActiveXObject) { var scripts = document.getElementsByTagName('script'); eval(scripts[scripts.length - 1].getAttribute('onload')); }