Поиск значков - когда не в местоположении по умолчанию - PullRequest
1 голос
/ 17 декабря 2011

Я показываю значки избранного с других сайтов на моей странице.

Примерно в половине случаев они здесь:

hostname.com/favicon.ico

Но другая половина - нет. Для примера на моем собственном сайте я ссылаюсь на мой .ico-файл следующим образом. FAVICON - это просто определение пути в PHP.

<link rel="SHORTCUT ICON" href="<?php echo FAVICON ?>" />

Как я могу получить URL избранного сайта, используя ссылку в html?

Это сайт говорит, что вы можете выполнить поиск в Google, например, так, чтобы ввести домен, для которого вам нужен значок.

http://www.google.com/s2/favicons?domain=domain

Это одно из решений, но оно кажется менее эффективным, чем простое чтение html по пути.

Я думаю, что Google кэшировал "ВСЕ" значки в формат .png и сделал их доступными для поиска -

за этот сайт

Ответы [ 2 ]

3 голосов
/ 17 декабря 2011

Загрузите страницу, используя Ajax и страницу прокси.Для Ajax:

// Create a request object:
var rq = new XMLHttpRequest(); // Not IE6-compatible, by the way.

// Set up the request:
rq.open('GET', 'proxy.php?url=' + encodeURIComponent(thePageURL), true);

// Handle when it's loaded:
rq.onreadystatechange = function() {
    if(rq.readyState === 4) {
        // The request is complete:
        if(rq.status < 400) {
            // The HTML is stored in rq.responseText; you could use a regular expression to extract the favicon, like /shortcut icon.+?href="(.+?)"/i.
        } else {
            // There was an error fetching the page; fall back?
        }
    }
};

и прокси-страницы (вероятно, вы захотите добавить немного безопасности):

<?php
echo file_get_contents($_REQUEST['url']);
?>

Google "Ajax", и вы найдете много информациио том, как это делать.

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

2 голосов
/ 17 декабря 2011

Разбор HTML - это неприятно - вы, вероятно, захотите использовать библиотеку вроде: http://www.controlstyle.com/articles/programming/text/php-favicon/ или позволить Google сделать это за вас: http://www.google.com/s2/favicons?domain=domain (гораздо эффективнее - вам не нужно разбирать все HTML на вашем сервере, и это всего лишь один тег). Если вы хотите что-то вроде функциональности Google на вашем сервере, перейдите по ссылке выше.

...