Dans Javascript, comment savoir quel script hôte a été chargé?

Dans javascript, en tant que script chargé depuis l'hôte somer, est-il possible de savoir de quel serveur / hôte j'ai été chargé? J'ai besoin de faire des demandes supplémentaires d'ajax à cet hôte et préférerais trouver l'hôte dynamiquement.

Donc, si vous incluez un fichier javascript sur une page

<script src="http://somehost.com/js/test.js"></script> 

Lorsque javascript exécute, dans test.js …

 var host_loaded_from = ??? // should be somehost.com 

Merci

Existe-t-il un moyen de savoir de quel serveur / hôte j'ai été chargé?

Oui, il est possible, sauf lorsque le script est chargé de manière asynchrone en utilisant des attributs async ou async puisque le dernier script dans le DOM ne peut pas nécessairement être le script en cours d'exécution dans ce cas. Voir les commentaires de @kangax pour plus d'informations.

De plus, cette même question a été publiée récemment.

À l'intérieur de votre test.js, obtenez le dernier élément de script qui sera le script actuellement analysé (test.js dans votre cas) et obtenez son src .

 // test.js var scripts = document.getElementsByTagName('script'); var src = scripts[scripts.length - 1].src; 

L'un de la src est trouvé, analysé l'hôte en utilisant regex.

 src.match(new RegExp('https?://[^/]*')) ["http://somehost.com"] // for your example 

Non désolé.

Si le <script> avait un identifiant, alors peut-être. Mais vous ne pouvez pas vraiment compter sur cela.

Je ne sais pas si cela peut être fait avec JavaScript. Si le script se trouve dans un fichier PHP, aimez-le:

 ... var host_loaded_from = <?php echo $_SERVER[SERVER_NAME] ?> ... 

Sur mon site, j'incline mes scripts JS en utilisant PHP uniquement pour cette raison. Je suis intéressé de voir s'il y a une meilleure façon.

En raison de la même politique d'origine, vous pouvez faire des requêtes AJAX uniquement à l'origine (hôte + protocole + port), la page HTML (document) a été chargée – ce qui n'est pas nécessairement le même que l'origine de laquelle votre js a été chargé.

Vous pouvez utiliser window.location.hostname ou document.location.hostname pour connaître le nom d'hôte du document.

Le script connait-il son propre nom de fichier? ("Test.js" dans la question OP).

Si tel est le cas, votre script pourrait interroger le dom pour toutes les balises de script, en recherchant celles avec un attribut src. Mais vous devriez faire attention à deux scripts avec le même nom de fichier chargé à partir de différents serveurs. Par exemple

 <script src="http://somehost.com/js/test.js"></script> <script src="http://somehost_number2.com/js/test.js"></script> 

Voici JS qui recherche toutes les étiquettes de script dans un:

 var scripts = el.getElementsByTagName('SCRIPT');