jQuery: como alterar o título do documento durante .ready ()?

146

Estou usando alguns layouts aninhados no Ruby on Rails, e em um dos layouts eu preciso ler uma string de uma div e defini-la como o título do documento. Qual é a maneira correta (se houver) de definir o título do documento?

<script type="text/javascript">
$(document).ready(function() {

    // ???

});
</script>
Jason Miesionczek
fonte
Apenas uma explicação para os que se perguntam por que não apenas definir a tag title ao lado do servidor: Às vezes, a página é gerada com conteúdo e ação misturados. Ou seja, você pode primeiro ter um arquivo de inclusão, que cria o cabeçalho, e o conteúdo é extraído de um banco de dados, por exemplo, nome do cliente. O que significa que, no momento em que o título foi enviado, o nome do cliente não é conhecido. É uma codificação superficial que não separa a lógica e a apresentação dos negócios, obtém todos os dados primeiro e depois os exibe, mas às vezes é isso que você tem. Chefe: "Basta colocar o nome personalizado no título" Você ", preciso refatorar todo o código".
Leif Neland

Respostas:

310

O seguinte deve funcionar, mas não seria compatível com SEO. É melhor colocar o título na tag title.

<script type="text/javascript">

    $(document).ready(function() {
        document.title = 'blah';
    });

</script>
dpan
fonte
14
Nenhum HTML gerado em javascript seria SEO incompatível? Tenho certeza de que o Googlebot não executa javascript ...
Orion Edwards
1
Eu li que existem maneiras de dizer ao Google Bot o que ler quando suas páginas são criadas com o Ajax ... tentando pesquisar no Google.
trusktr
2
@trusktr: Acho que você está falando sobre este artigo do Google: Como tornar os aplicativos AJAX rastreáveis . Mas não tem nada a ver com esse tipo de problema, então Orion Edwards está certo. É apenas um método para permitir que o Google leia conteúdos normalmente gerados com o AJAX, por meio de instantâneos em HTML e algumas modificações no servidor.
Sk8erPeter
1
não funciona no FF 29.0.1 para mim, mas esta solução descrita abaixo funciona: stackoverflow.com/a/11171548/1915920
Andreas Dietrich
2
@OrionEdwards Agora, mais de cinco anos depois, rimmkaufman.com/blog/googlebot-crawling-javascript-site-ready/…
kqr
48

Não use $('title').text('hi'), porque o IE não suporta.

É melhor usar document.title = 'new title';

vasio
fonte
43

Isso funciona bem em todos os navegadores ...

$(document).attr("title", "New Title");

Também funciona no IE

Albert
fonte
2
Esse SEO é amigável?
SearchForKnowledge
@SearchForKnowledge check stackoverflow.com/questions/30588501/…
HasanG
36

Como isso:

$(document).ready(function ()
{
    document.title = "Hello World!";
});

Certifique-se de definir um título padrão se desejar que seu site seja indexado corretamente pelos mecanismos de pesquisa.

Uma pequena dica:

$(function ()
{
    // this is a shorthand for the whole document-ready thing
    // In my opinion, it's more readable 
});
cllpse
fonte
3
Você deve postar a abreviação como uma nova "pergunta" em si mesma. Útil!
MDCore 7/10/08
Não sei se entendi, MDCore.
Cllpse
Jeff sugeriu que se use o stackoverflow para as dicas técnicas que se pode colocar no blog. Eu estava sugerindo postar a dica como uma nova pergunta que você mesmo responde.
MDCore 8/08
16
<script type="text/javascript">
$(document).ready(function() {

    $(this).attr("title", "sometitle");

});
</script>
Atanas Korchev
fonte
2
sim, na verdade, você não pode usar $('title').text(...)por causa do bug no IE
TMS
1
Por que não document.title?
Adardesign
6

document.title não estava funcionando para mim.

Aqui está outra maneira de fazer isso usando JQuery

$('html head').find('title').text("My New Page Title");
John F
fonte
para mim também (29.0.1 FF) e se não há como <title>configurar em tudo, mesmo $('html head').add('<title>override default title</title>')não trabalho
Andreas Dietrich
2
Esse SEO é amigável?
SearchForKnowledge
5

Estou usando alguns layouts aninhados no Ruby on Rails, e em um dos layouts eu preciso ler uma string de uma div e defini-la como o título do documento.

A maneira correta de fazer isso é no lado do servidor.

No seu layout, em algum momento haverá algum código que coloca o texto na div . Faça com que esse código também defina alguma variável de instância como @page_title, e, em seu layout externo, faça<%= @page_title || 'Default Title' %>

Orion Edwards
fonte
-2

Se você tiver um script get_title.php do lado do servidor que ecoa a sessão de título atual, isso funciona bem no jQuery:

$.get('get_title.php',function(*respons*){
    title=*respons* + 'whatever you want'   
    $(document).attr('title',title)
})
andreas
fonte
2
fazer um pedido de ajax para definir o título é um desperdício na minha opinião.
21711 Jason Miesionczek #
2
A OP solicitou especificamente uma solução jQuery para um problema do lado do cliente.
Joel Etherton
1
Definir o título via ajax é útil, pois pode ajudar a identificar a guia atual do navegador para o usuário quando ele estiver em uma página diferente.
chim