Il existe de nombreuses façons de modifier le titre, les deux principaux étant les suivants:
La méthode discutable
Mettez une balise de titre dans le HTML (par exemple <title>Hello</title>
), puis en javascript:
let title_el = document.querySelector("title");
if(title_el)
title_el.innerHTML = "World";
La méthode évidemment correcte
Le plus simple est d’utiliser la méthode fournie par le Document Object Model (DOM)
document.title = "Hello World";
La première méthode est généralement ce que vous feriez pour modifier les balises trouvées dans le corps du document. L'utilisation de cette méthode pour modifier des balises de métadonnées comme celles trouvées dans la tête (comme title
) est au mieux une pratique discutable, n'est pas idiomatique, pas un très bon style pour commencer, et pourrait même ne pas être portable. Une chose dont vous pouvez être sûr, c'est que cela ennuiera les autres développeurs s'ils voient title.innerHTML = ...
dans le code qu'ils gèrent.
Ce que vous voulez utiliser, c'est cette dernière méthode. Cette propriété est fournie dans la spécification DOM spécifiquement dans le but, comme son nom l'indique, de changer le titre.
Notez également que si vous travaillez avec XUL, vous voudrez peut-être vérifier que le document a été chargé avant d'essayer de définir ou d'obtenir le titre, sinon vous invoquez undefined behavior
(ici des dragons), ce qui est un concept effrayant à part entière. Cela peut ou non se produire via JavaScript, car les documents sur le DOM ne concernent pas nécessairement JavaScript. Mais XUL est une bête entière, donc je m'égare.
En parlant de .innerHTML
Un bon conseil à garder à l'esprit serait que l'utilisation .innerHTML
est généralement bâclée. Utilisez appendChild
plutôt.
Bien que deux cas où je trouve encore .innerHTML
utile incluent l'insertion de texte brut dans un petit élément ...
label.innerHTML = "Hello World";
// as opposed to...
label.appendChild(document.createTextNode("Hello World"));
// example:
el.appendChild(function(){
let el = document.createElement("span");
el.className = "label";
el.innerHTML = label_text;
return el;
}());
... et vider un conteneur ...
container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
container.removeChild(child);
});