Existem várias maneiras de alterar o título, as duas principais, são assim:
O método questionável
Coloque uma tag de título no HTML (por exemplo <title>Hello</title>
) e depois em javascript:
let title_el = document.querySelector("title");
if(title_el)
title_el.innerHTML = "World";
O método obviamente correto
O mais simples de tudo é realmente usar o método fornecido pelo DOM (Document Object Model)
document.title = "Hello World";
O método anterior é geralmente o que você faria para alterar as tags encontradas no corpo do documento. Usar esse método para modificar tags de metadados, como os encontrados na cabeça (como title
), é uma prática questionável, na melhor das hipóteses, não é idiomático, não é um estilo muito bom para começar e pode até não ser portátil. Uma coisa que você pode ter certeza, porém, é que isso incomodará outros desenvolvedores se eles virem o title.innerHTML = ...
código que estão mantendo.
O que você quer seguir é o último método. Esta propriedade é fornecida na Especificação do DOM especificamente com a finalidade, como o nome sugere, de alterar o título.
Observe também que, se você estiver trabalhando com o XUL, verifique se o documento foi carregado antes de tentar definir ou obter o título, caso contrário, você está invocando undefined behavior
(aqui estão dragões), que é um conceito assustador por si só. Isso pode ou não ocorrer via JavaScript, pois os documentos no DOM não pertencem necessariamente ao JavaScript. Mas XUL é um animal totalmente diferente, então eu discordo.
Falando de .innerHTML
Um bom conselho a ter em mente seria que o uso .innerHTML
geralmente é desleixado. Use em appendChild
vez disso.
Embora dois casos em que eu ainda ache .innerHTML
útil sejam: inserir texto sem formatação em um pequeno elemento ...
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;
}());
... e limpando um recipiente ...
container.innerHTML = "";
// as opposed to... umm... okay, I guess I'm rolling my own
[...container.childNodes].forEach(function(child){
container.removeChild(child);
});