Obtenir l'URL de l'exécution du fichier JavaScript (problème IE6-7 principalement)

Hey all, j'ai essayé de jeter ensemble une fonction générique qui récupère l'URL absolue d'un fichier JavaScript d'exécution sur une page Web:

Http://gist.github.com/433486

Fondamentalement, vous pouvez appeler quelque chose comme ceci:

getScriptName(function(url) { console.log(url); // http://www.example.com/myExternalJsFile.js }); 

À l'intérieur d'un fichier JavaScript externe sur une page et peut alors faire quelque chose avec lui (comme s'il vous plaît trouver la <script> qui l'a chargé par exemple).

Cela fonctionne très bien dans presque tous les navigateurs que j'ai testés (Firefox, Chrome, Safari, Opera v10 au moins et IE 8).

Il semble échouer, cependant, dans IE 6 et 7. La fonction de rappel est exécutée, mais le nom récupéré est l'URL de la page HTML principale, et non le fichier JavaScript. En continuant avec l'exemple, getScriptName invoque le rappel avec le paramètre: http://www.example.com/index.html

Donc, tout ce que je demande vraiment, c'est s'il existe une autre façon d'obtenir l'URL du fichier JavaScript actuel (qui pourrait être une fourchette spécifique IE 6 et 7)? Merci d'avance!

EDIT: De plus, cela ne fonctionnera pas dans tous les cas, alors ne le recommandez pas:

 var scripts = document.getElementsByTagName("script"); return scripts[scripts.length-1].src; 

J'aimerais que cela fonctionne dans le cas de balises de script créées dynamiquement (éventuellement non placées en dernier dans la page), comme un chargement par défaut.

Beaucoup de choses dépendent de ce dont vous avez accès. Si, comme il apparaît, vous essayez de le faire entièrement dans le code JS, je ne crois pas que vous êtes capable de le faire, pour certaines des raisons indiquées ci-dessus. Vous pourriez avoir 90% de la manière, peut-être, mais pas être définitif.

Si vous travaillez dans un environnement dotnet (qui est le seul que je connais), je suggère l'utilisation d'un module qui intercepte toutes les requêtes JS et y ajoutera l'emplacement de la demande, ou quelque chose de cette nature.

Je pense que vous devez aborder cela du côté du serveur, pas du côté client. Je ne pense pas que vous aurez une réponse définitive du côté client. Je pense que vous auriez du mal à obtenir une réponse du côté du serveur, mais vous pourriez avoir plus de succès.

Désolé, je pense que vous pourriez vous battre avec cela. IE plus tôt que la version 8 donne généralement des messages d'erreur à partir d'erreurs JavaScript du formulaire:

 line: 342 char: 3 error: expected identifier, string or number code: 0 url: http://example.com/path/to/resource 

Où l'url est la fenêtre.location.href, plutôt que l'URL de la ressource JavaScript externe qui contient le problème. Je suggère que IE donne la valeur inutile de l'URL car l'URL du script n'est pas disponible pour IE à ce moment-là, et il n'est pas non plus disponible pour tout Javascript que vous pourriez écrire pour tenter de l'afficher.

J'aimerais pouvoir lier des notes de version IE8 qui disent que ce bug / fonctionnalité a été corrigé, d'où la raison pour laquelle j'ai créé cela comme wiki communautaire. Mon MSDN foo est assez faible!