четверг, 24 сентября 2009 г.

Как браузер определяет next page на странице для быстрой постраничной навигации?

Как браузер определяет ссылку «next page» на странице? – Задался я сегодня таким вопросом, в процессе навигации по поисковику при помощи комбинаций клавиш, без использования мыши. Общеизвестный факт, что для постраничной навигации в браузере можно использовать комбинации клавиш вида ctrl+курсорные клавиши. По крайней мере, это работает без проблем на многих популярных сайтах в браузерах Opera и Firefox.

Но как же браузер определяет, какая ссылка является следующей логической страницей в цепочке html-документов? Начал рассматривать варианты реализации. Самое первое, что пришло на ум, это использование отношений ссылок в документе при помощи атрибута rel у элементов <a>. Догадка оказалась неверна, её в основном используют поисковики для индексации, но никак не браузеры. Ещё вариант в <head> html-страницы указать

<LINK rel="prev" href="page2.html">
<LINK rel="next" href="page4.html">

но назначние такое же, суть вопроса не меняется.

Второй вариант, как это можно реализовать, это повесить события JavaScript на нажатия клавиш, для быстрого перехода по пейджерам. Собственно, поисследовав код на поисковике Яндекс, я нашёл следующее. Они вешают вызов функции на событие document.onkeydown. Сама функция выглядит следующим образом:

function keyboard_navigation(D) {
  D = D || window.event;
  var A = D.keyCode;
  if (D.ctrlKey) {
    var B = $id("b-head-search");
    if (A == 13) {
      B.submit();
    }
    var E = (D.target || D.srcElement).tagName;
    if (E != "INPUT" && E != "TEXTAREA") {
      var C;
      if (A == 37) {
        C = $id("previous_page");
      }
      if (A == 39) {
        C = $id("next_page");
      }
      if (C) {
        location.href = C.href;
      }
      if (A == 38 && B.text) {
        B.text.focus();
        B.text.select();
      }
    }
  }
}

После этого, полез смотреть на Google, как реализована у них постраничная навигация при помощи комбинации клавиш ctrl+cursor left или ctrl+cursor right. Но, оказалось, что никаких обработчиков событий с клавиатуры у них не висит, и в Firefox подобный финт не работает. Такая комбинация клавиш отрабатывала только в Opera.

Получается, что браузер Opera имеет собственный детектор пейджингов на странице. Поиски в просторах Интернета не сразу дали ответ на мой вопрос. Моё упорство и сильный интерес всё-таки победили после получасовых поисков. Оказывается, браузер Opera использует собственную технологию для определения ссылок перехода на следующую страницу, для многостраничных документов или блогов. Имя этой технологии FastForward.

Opera FastForward – технология, введенная ещё со времён Opera 7. Она автоматически «угадывает» следующую страницу, и обеспечивает быструю навигацию по цепочке страниц. Это очень удобно, например, при чтении блогов, можно осуществлять постраничное чтение, всего лишь нажимая пробел для пролистывания. Как это работает? Opera загружает содержимое страницы и в нём ищет определённые ссылки, которые часто используются для навигации по многостраничным документам, содержащие текст вида "next" или ">>". Я сразу же полез в папку, где лежит исполняемый файл Оперы, и начал искать в конфигах. Нашёл файл fastforward.ini, в нём и находились настройки для этого заветного FFwd. Оказывается, в нём прописаны самые распространенные сигнатуры для большинства языков, по которым в тексте ссылок ищется адрес перехода на следующую страницу. Опытным путём, я выяснил, если на странице находится несколько подобных ссылок, то во внимание будет взято лишь последнее вхождение на странице. Так что, такую вот хитрую технологию использовали разработчики браузера Opera.

Именно за такие мелкие навороты, удобство и скорость работы я и люблю браузер Opera, постоянно использую для серфинга по internet.

вторник, 22 сентября 2009 г.

Липовый email для регистраций на сайтах

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

http://10minutemail.com/

Как можно судить из названия, данный сервис выделяет вам временный email-ящик на 10 минут. Этого оказывается достаточно чтобы получить активационное письмо и перейти по ссылке для подтверждения вашей учётной записи. Если вы чувствуете, что письмо вот-вот на подходе, а его всё нет, то кликнув по ссылке, вы можете продлить термин действия ящика ещё на 10 минут.

Кстати, вы даже можете ответить на входящие письма, но учтите, ваш э-майл адрес самоуничтожиться через 10 минут.

Как утверждает автор сервиса, он регулярно покупает и меняет доменные имена для почтовых ящиков. Это делается для того, чтобы усложнить задачу администраторам других сайтов, которые блокируют регистрации по таким «липовым» доменам. Ну, и тем самым, это спасает сервера сервиса от падения под тоннами ответного спама.

Наслаждайтесь!

четверг, 17 сентября 2009 г.

Эх, работа..

Работа – последнее прибежище для тех, кто больше ничего не умеет.
О. Уайльд (англ.писатель)

среда, 16 сентября 2009 г.

MySQL - Проблемы c русской кодировкой

Только что писал небольшой скрипт, парсер для сайтов, и натолкнулся на проблему, что русские символы не записывались в таблицу MySQL. При update или insert в таблицу все символы записываются нормально, но как только встречается русский текст – он просто обрезается и всё.

Проверил в какой кодировке работает скрипт, в базе данных, в таблице атрибут character set стоял utf8, и collation был задан utf8_general_ci. Всё правильно. Значит проблема не в этом. Тогда попробовал при установке соединения с MySQL задавать «SET NAMES utf8», проверил – тоже нихрена, не помогло. Спросил у сотрудников – сразу сходу мне никто не ответил, в чём собственно проблема.

В итоге, после получаса копаний, всё-таки вставил заветную строчку

$query = iconv("cp1251", "UTF-8", $query);

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

понедельник, 7 сентября 2009 г.

Эквивалент функции function_exists на JavaScript

Бывают ситуации, когда нужно проверить существует ли объявление функции непосредственно перед её вызовом. На языке php для этого существует специальная функция bool function_exists (string $function_name). В языке JavaScript такая функция, увы, отсутствует. Тогда напишем своими ручками...

Эквивалент функции function_exists на JavaScript будет выглядеть следующим образом:

if (window.runThisFunction) { // if function is defined - run it
    runThisFunction();
}

Это было самое простое и короткое решение, но для любителей всё усложнять, могу привести и другой пример, который удалось найти в Интернете. Более сложный пример function_exists на JavaScript приведен ниже, оформлен в виде функции, возвращающей bool-значения:

function function_exists (function_name) {
    if (typeof function_name == 'string'){
        return (typeof this.window[function_name] == 'function');
    } else{
        return (function_name instanceof Function);
    }
}

Рекоммендую

Попробуйте надёжный хостинг от Scala Hosting