Comment coder dans un fichier JavaScript obtenir l'URL du fichier?
J'ai besoin de charger dynamiquement une feuille de style CSS dans une page qui est sur un différents domaine. Comment puis-je obtenir l'URL complète du fichier JS à utiliser dans la href attribut de la feuille de style?
Par exemple, voici la structure:
http://bla.com/js/script.js
http://bla.com/css/style.css
Je veux charger dynamiquement la feuille de style dans une page http://boo.net/index.html. Le problème est, je ne sais pas le bla.com peu en avance, juste le fait que la feuille de style est en ../css/ par rapport à la JS fichier.
Le script est, bien sûr, inclus sur index.html. jQuery est très bien aussi.
source d'informationauteur montrealist
Vous devez vous connecter pour publier un commentaire.
Ajouter un ID à la balise script:
Et dans
http://bla.com/js/script.js
:Vous devriez être en mesure de manipuler la valeur de
myScriptSrc
pour obtenir le chemin d'accès de tout autre contenu surbla.com
.Je pense que cet exemple est ce que James Black signifiait dans sa réponse.
Enfin, à tout le monde ce qui suggère l'utilisation de
document.location
veuillez garder à l'esprit que si vous voulez un accès en lecture seule à l'actuel de l'adresse de la page, vous devriez être en utilisantdocument.URL
ouwindow.location
. Si vous souhaitez définir l'adresse de la page, vous devez toujours utiliserwindow.location.href
. Bien quewindow.location = 'location';
des travaux, il a m'a toujours agacé de voir une Chaîne d'être affecté à un Emplacement. Je ne suis pas sûr pourquoi, depuis JavaScript permet toutes sortes d'autres conversions de types implicites.document.location
était à l'origine une propriété en lecture seule, bien que Gecko des navigateurs vous permettent de lui attribuer. Pour la croix-navigateur de sécurité, d'utilisation de la fenêtre.emplacement à la place. Pour récupérer l'URL comme une chaîne de caractères, la lecture seule document.URL propriété peut être utilisée.document
objet; utiliser le document.URL propriété plutôt. Ledocument.location
de la propriété, qui est un synonyme dedocument.URL
est obsolète.Avec Jquery, vous pourriez faire quelque chose comme:
Même plus facile que d'utiliser un
id
est de simplement laisser le balisage seul et l'utilisationdocument.currentScript
. Le lien pour le MDN mentionne sous le Note section, un petit caprice nécessitant le JavaScript pour exécuter de manière synchrone, et je vais vous expliquer comment faire pour éviter cet écueil.L'avantage de cette solution est que vous n'êtes pas obligé d'utiliser des balises, et ceci est particulièrement utile si vous ne pouvez pas accéder au code HTML vous-même pour une raison quelconque (par exemple, si il est utilisé par un client ou un développeur à l'aide de votre API).
Si le script est exécuté en mode synchrone (qui signifie que le contenu principal du script n'est pas emballé dans un écouteur d'événement ou une autre fonction d'évaluer au plus tard lorsque le code est "au départ, en cours de traitement" ), vous pouvez simplement utiliser
document.currentScript
pour accéder aux cours de traitement<script>
élément de votre code. Pour montrer comment utiliser efficacement, je vais vous donner une base de démonstration ci-dessous.HTML:
JavaScript dans
http://bla.com/js/script.js
:Si vous ne voulez pas la variable d'être exposé à la portée globale, vous pouvez également le faire:
Fondamentalement, le point est de s'assurer et d'accès
document.currentScript
au cours de l'exécution synchrone du script, sinon il ne sera pas de référence de ce que vous attendez.Que le navigateur analyse des balises, il a également télécharge et exécute. Par conséquent, lorsque votre fichier JS est exécuté, il est actuellement la dernière balise analysée.
Vous pouvez lire
document.location
mais vous pourriez tout aussi bien utiliser des Url relativesVous pourriez regarder dans la balise de script pour le javascript emplacement, et en utilisant document.l'emplacement vous pourriez probablement de déterminer l'adressage relatif, pour déterminer l'endroit où le fichier css peut être.
Propriété de pile d'objets d'erreur peut fournir des informations d'URL.
Malheureusement, Webkit n'est pas (mais Chrome ne) support de la pile de la propriété. Il y a un peu de navigateurs supportant cette fonctionnalité: http://173.45.237.168/reference/html/api/Error.html#Error.stack
Au lieu de la pile, Webkit fournit sourceURL de la propriété, là est le exampe utilisation: