jQuery: как изменить заголовок документа во время .ready ()?


146

Я использую несколько вложенных макетов в Ruby on Rails, и в одном из макетов мне нужно прочитать строку из div и указать ее в качестве заголовка документа. Как правильно (если есть) установить заголовок документа?

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

    // ???

});
</script>

Просто объяснение для тех, кто интересуется, почему бы просто не установить тег заголовка на стороне сервера: иногда страница генерируется со смешанным содержанием и действием. Т.е. сначала у вас может быть файл incude, который создает заголовок, а затем содержимое извлекается из базы данных, например, имя клиента. Что означает, что во время отправки заголовка имя клиента неизвестно. Это неаккуратное кодирование, которое не разделяет бизнес-логику и представление, сначала получает все данные, а затем выводит их на экран, но иногда это то, что у вас есть. Босс: «Просто введите имя клиента в заголовке« Вы », я должен рефакторинг всего кода».
— Лейф Неланд

Ответы:


310

Следующее должно работать, но оно не будет совместимо с SEO. Лучше всего поместить заголовок в тег заголовка.

<script type="text/javascript">

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

</script>

14
Не будет ли какой-нибудь сгенерированный javascript HTML несовместимым с SEO? Я почти уверен, что googlebot не выполняет javascript ...
— Orion Edwards,

1
Я читал, что есть способы сообщить Google Bot, что читать, когда ваши страницы создаются с помощью Ajax ... пытаясь найти их.
— trusktr

2
@trusktr: я думаю, что вы говорите об этой статье Google: Создание приложений AJAX для сканирования . Но это НИЧЕГО не имеет отношения к такой проблеме, поэтому Орион Эдвардс прав. Это просто метод, позволяющий Google читать содержимое, которое обычно генерируется с помощью AJAX, через снимки HTML и некоторые модификации на стороне сервера.
— Sk8erPeter

1
у меня не работает в FF 29.0.1, но работает описанное ниже решение: stackoverflow.com/a/11171548/1915920
— Андреас Дитрих

2
@OrionEdwards Теперь, более пяти лет спустя, rimmkaufman.com/blog/googlebot-crawling-javascript-site-ready/…
— kqr

48

Не используйте $('title').text('hi'), потому что IE не поддерживает его.

Лучше использовать document.title = 'new title';



36

Как это:

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

Обязательно установите заголовок по умолчанию, если вы хотите, чтобы ваш сайт был правильно проиндексирован поисковыми системами.

Небольшой совет:

$(function ()
{
    // this is a shorthand for the whole document-ready thing
    // In my opinion, it's more readable 
});

3
Вы должны опубликовать стенографию как новый «Вопрос» сам по себе. Полезно!
— MDCore

Не уверен, что понимаю вас, MDCore.
— cllpse

Джефф предположил, что можно использовать stackoverflow для тех технических советов, которые можно разместить в своем блоге. Я предлагал опубликовать совет как новый вопрос, на который вы отвечаете сами.
— MDCore


6

document.title не работал для меня.

Вот еще один способ сделать это с помощью JQuery

$('html head').find('title').text("My New Page Title");

для меня тоже (FF 29.0.1) и если вообще ничего не <title>настроено, даже $('html head').add('<title>override default title</title>')не работает
— Андреас Дитрих

2
Это SEO дружественный?
— SearchForKnowledge

5

Я использую несколько вложенных макетов в Ruby on Rails, и в одном из макетов мне нужно прочитать строку из div и указать ее в качестве заголовка документа.

Правильный способ сделать это на стороне сервера.

В вашем макете в какой-то момент будет какой-то код, который помещает текст в div . Сделайте, чтобы этот код также установил некоторую переменную экземпляра, такую ​​как @page_title, и затем во внешнем макете сделайте это<%= @page_title || 'Default Title' %>


-2

Если у вас есть серверный скрипт get_title.php, который повторяет текущий титульный сеанс, это прекрасно работает в jQuery:

$.get('get_title.php',function(*respons*){
    title=*respons* + 'whatever you want'   
    $(document).attr('title',title)
})

2
выполнение ajax-запроса для установки заголовка, на мой взгляд, очень расточительно.
— Джейсон Месьончек

2
OP специально запросил решение jQuery для проблемы на стороне клиента.
— Джоэл Этертон

1
Установка заголовка через ajax полезна, так как может помочь идентифицировать текущую вкладку браузера для пользователя, когда он находится на другой странице.
— Чим
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.