Qu'est-ce que mon script src URL?
Est-il une manière simple et fiable pour déterminer l'URL de la cours d'exécution fichier JavaScript (à l'intérieur d'une page web)?
Ma seule pensée est de numériser les DOM pour tous les script src
attributs à rechercher la façon dont le fichier a été référencé, et puis trouver l'URL absolue en l'appliquant à document.location
. Quelqu'un a d'autres idées, est-il un super-facile méthode que j'ai complètement oublié?
Mise à JOUR: éléments de Script accessible via le DOM ont déjà un src
de la propriété qui contient l'URL complète. Je ne sais pas comment omniprésent/standard, mais vous pouvez également utiliser getAttribute("src")
qui va retourner tout cru valeur de l'attribut est dans le [X]HTML.
Vous devez vous connecter pour publier un commentaire.
Mettre ceci dans le fichier js qui doit connaître sa propre adresse url.
Pleinement Qualifié (par exemple
http://www.example.com/js/main.js
):Ou
Tel qu'il apparaît dans la source (par exemple
/js/main.js
):Voir http://www.glennjones.net/Post/809/getAttributehrefbug.htm pour l'explication de la
getAttribute
paramètre utilisé (c'est un IE bug).<script src="..." async>
balises, (le html5 forme de chargement paresseux) et même sans cela, il ne fonctionne pas du tout sur FF12, donc je suppose que les navigateurs récents commencent à rompre délibérément que.script.src
que FF et les autres navigateurs, mais votre code de retourscript.getAttribute('src', -1)
aussi pour IE8, et IE8 ne serait PAS de retour complet de la src comme IE6 et IE7 n'.src
est retourné.Pour les navigateurs récents, vous pouvez utiliser le document.currentScript pour obtenir cette information.
L'avantage est que c'est plus fiable pour les scripts qui sont chargés de manière asynchrone. L'inconvénient est qu'il n'est pas, du mieux que je le sais, universellement pris en charge. Il devrait fonctionner sur Chrome >= 29, FireFox >= 4, Opera >= 16. Comme beaucoup de choses utiles, il ne semble pas fonctionner sous IE.
Quand j'en ai besoin pour obtenir un chemin du script, j'ai vérifier si le document.currentScript est défini, et, si non, utilisez la méthode décrite dans l'acceptation de réponse.
https://developer.mozilla.org/en-US/docs/Web/API/document.currentScript
Tel qu'il apparaît dans la source (par exemple
/js/main.js
), c'est de la croix-navigateur:Pleinement Qualifié (par exemple
http://www.example.com/js/main.js
):Après quelques tests, il semble difficile d'obtenir le pleinement qualifié un dans une manière de croix-navigateur. Le solution proposée par le Croissant-Frais ne fonctionne pas avec IE8 pour obtenir le complet, même si elle travaille dans IE7
Cette méthode de travail à reporter, asynchrone et le chargement paresseux
Puisque vous connaissez le nom de votre script, et si elle sera unique
un plugin jquery template avec elle:
https://github.com/mkdgs/mkdgs-snippet/blob/master/javascript/jquery.plugins.template.js
remarque: ceci ne fonctionnera pas avec le script local chargé par jQuery.getScript(), car il n'y a pas de balise de script ajouté dans les dom. le script n'est évaluée que dans l'espace global.
http://api.jquery.com/jQuery.getScript/
pour le fixer, vous pouvez faire quelque chose comme:
document.currentScript
ici. Malheureusement, la prise en charge du navigateur de l'information n'est pas tey disponible sur caniuse.com. Vous pouvez nous aider en upvoting l'ouverture de la question: github.com/Fyrd/caniuse/issues/1099.Si c'est strictement de la solution de client, le tien semble assez bonne.
Si vous écrivez du code sur le serveur, vous pourriez probablement juste de remplir un div/champ caché/(insérer votre fave élément HTML ici) avec l'complètement résolu URL du script, et choisissez avec votre javascript sur le client.
Vous voudrez peut-être avoir un coup d'oeil à https://addons.mozilla.org/en-US/firefox/addon/10345 si vous êtes intéressés à en apprendre les fonctions (et donc le fichier) sont en cours d'exécution sur une page, vous n'avez pas de contrôle.
Si vous êtes intéressé à essayer de comprendre qui de votre scripts est en cours d'exécution, alors il ya un certain nombre de façons. Avec Firebug vous pourriez
console.log()
l'information. Même juste la mise en alerte des instructions dans votre code (bien que gênant) peut vous aider à déboguer dans un low-tech façon. Vous pouvez également déclencher des erreurs et de les attraper, puis en utilisant les propriétés de l'erreur (voir: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Error)Cependant, pourquoi en serait-il important? Si le script est à l'origine des erreurs déjà à l'époque, il est assez facile de déterminer où l'erreur est survenue. Si ce n'est pas sur les erreurs à tous, alors quel est l'avantage de savoir qui fichier elle vient?