Есть много способов изменить заголовок, два основных из них выглядят так:
Сомнительный метод
Поместите тег заголовка в HTML (например <title>Hello</title>
), затем в JavaScript:
let title_el = document.querySelector("title");
if(title_el)
title_el.innerHTML = "World";
Очевидно правильный метод
Самым простым из них является использование метода, предоставляемого объектной моделью документов (DOM).
document.title = "Hello World";
Первый метод обычно используется для изменения тегов, найденных в теле документа. Использование этого метода для изменения метаданных меток, подобных тем, которые встречаются в заголовке (например title
), в лучшем случае сомнительная практика, не является идиоматичным, не очень хорошим стилем для начала и даже не может быть переносимым. Однако вы можете быть уверены в том, что это будет раздражать других разработчиков, если они увидят title.innerHTML = ...
в поддерживаемом ими коде.
То, что вы хотите пойти, это последний метод. Это свойство предоставляется в спецификации DOM специально для целей, как следует из названия, изменения названия.
Также обратите внимание, что если вы работаете с XUL, вы можете проверить, что документ загружен, прежде чем пытаться установить или получить заголовок, так как в противном случае вы вызываете undefined behavior
(здесь драконы), что само по себе является страшной концепцией. Это может происходить или не происходить с помощью JavaScript, так как документы в DOM не обязательно относятся к JavaScript. Но XUL - целое «другое чудовище», поэтому я отвлекся.
Говоря о .innerHTML
Несколько хороших советов, которые следует иметь в виду, это то, что использование .innerHTML
обычно небрежно. Используйте appendChild
вместо этого.
Хотя два случая, которые я все еще нахожу .innerHTML
полезными, включают вставку простого текста в небольшой элемент ...
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;
}());
... и очистка контейнера ...
container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
container.removeChild(child);
});