Получить название веб-сайта

Я пытаюсь получить заголовок URL-адреса для ссылки.

Например, получите заголовок этого:

<a class="stack" href="http://stackoverflow.com" title="Stack Overflow">

будет генерироваться динамически из чего-то вроде этого: $('.stack').attr("title", "....");.

Возможно ли это с помощью javascript или jQuery для получения заголовка URL-адреса?

Большое спасибо


person jQuerybeast    schedule 09.11.2011    source источник
comment
Итак, вы хотите получить заголовок выбранного URL-адреса или атрибут title этого элемента?   -  person Drake    schedule 09.11.2011
comment
@ItayMoav Мне жаль, что я пытаюсь улучшить.   -  person jQuerybeast    schedule 09.11.2011
comment
@drake Я пытаюсь получить название href.   -  person jQuerybeast    schedule 09.11.2011


Ответы (4)


Потребовалось немного времени, чтобы сделать, но этот пример позволяет вам загрузить веб-страницу с вашей веб-страницы. Затем извлеките заголовок из тегов title.

<html>
<head>
<!-- jQuery include -->
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<!-- This include allows cross domain get requests -->
<script type="text/javascript" src="https://raw.github.com/jamespadolsey/jQuery-Plugins/master/cross-domain-ajax/jquery.xdomainajax.js"></script>

<!-- Sample -->
<script type="text/javascript">
$(document).ready(function(){
    //gets the href of the first anchor
    var url = $("a").first().attr("href");

    //sets a get request to get the html source
    $.get(url, function(data){
        //uses get string between function to get the text between the title tags
        //then calls it in a message box
        alert(getStringBetween(data.responseText, "<title>", "</title>"));
    }); 
});

function getStringBetween(input, start, end){
    var index = input.indexOf(start);

    if(index != -1){
        index += start.length;
        var endIndex = input.indexOf(end, index + 1);

        if(endIndex != -1)
            return input.substr(index, endIndex - index);
    }
    return false;
}
</script>

</head>
<body>
    <a href="http://www.google.com/">Google</a>
</body>
</html>
person Drake    schedule 09.11.2011
comment
Это будет работать только в пределах вашего домена. Кроме того, вы должны анализировать HTML с помощью jQuery вместо сопоставления строк. (А как насчет <tiTle>?) - person SLaks; 09.11.2011
comment
@SLaks, как насчет того, чтобы попробовать код, который я только что дал, прежде чем утверждать, что он не работает. - person Drake; 09.11.2011
comment
Вы используете серверный прокси; Я этого не заметил. - person SLaks; 09.11.2011

Да, просто используйте document.title. Просто и эффективно.

$('.stack').attr("title", document.title);

РЕДАКТИРОВАТЬ: Похоже, я неправильно понял ваш вопрос. Если вы хотите получить заголовок другой страницы, а не загруженной в данный момент страницы, вы можете использовать некоторые междоменные трюки AJAX, но обычно это не очень хорошая идея. Я бы просто взял сервер заголовка страницы (в том, что вы используете для создания страницы [php, asp и т. д.]) и вывел ее.

person jli    schedule 09.11.2011
comment
Это устанавливает заголовок ссылки на заголовок текущей страницы (document.title). Не думайте, что этого хочет ОП. - person Felix Kling; 09.11.2011

Из соображений безопасности вы не можете читать контент с другого веб-сайта с помощью Javascript, даже просто для чтения заголовка.

Вы можете написать прокси-сервер на стороне сервера, который запрашивает удаленную страницу и находит ее тег <title> с помощью парсера HTML.

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

person SLaks    schedule 09.11.2011
comment
Хорошо, теперь я понимаю это. В основном я ищу что-то вроде использования известных сайтов закладок. Например, delicious.com дает вам заголовок этой страницы... Имеет ли это смысл? - person jQuerybeast; 09.11.2011
comment
Они делают это заранее на сервере. - person SLaks; 09.11.2011
comment
О вашем редактировании: это небольшой сайт закладок. Я не могу придумать другого способа сделать это. Я имею в виду, что клиент добавляет веб-сайт, вам нужно дать ему название... - person jQuerybeast; 09.11.2011
comment
Вы имеете в виду использование серверного прокси? - person jQuerybeast; 09.11.2011
comment
да. Если вам нужно показать заголовок, который добавляет пользователь перед перезагрузкой, вам нужно будет использовать AJAX с прокси. В противном случае вы должны искать заголовок при добавлении закладки и сохранять его в БД. - person SLaks; 09.11.2011

Если URL-адрес href не находится в домене текущего документа, использование JavaScript для попытки получить заголовок целевого документа потребует междоменного сценария, который обычно не разрешен (с использованием традиционных методов) браузерами. Если вы не очень любите прокси (не совсем уверены, как это делается), вам понадобится серверный язык для загрузки документа в первую очередь.

person Joel Salisbury    schedule 09.11.2011
comment
Или, в основном, то, что сказал SLaks! Извините, не увидел вашего ответа! - person Joel Salisbury; 09.11.2011
comment
Сценарии на стороне сервера не нужны, если вы используете правильный плагин - person Drake; 09.11.2011
comment
@Дрейк: Неправильно. Если страница не находится на вашей стороне (а он подразумевает, что это не так), вам нужен код на стороне сервера. - person SLaks; 09.11.2011