Link Checker RU : Что "под капотом"
Опубликовано: Бармалей · 03.10.2019 · 00:02 ••• Обновление: 17.10.2020 · 14:58 0

…Как понимаю, вы уже прочитали общий обзор и хотите поглубже разобраться что и как в этом аддоне…)

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

В этой статье:


Отличия от оригинала и аналогов

По отношению к исходному аддону и его аналогам в Link Checker RU имеются следующие отличия:

  • Форк оптимизирован для работы на любых версиях хром-браузеров, код проверен на версиях 29-69.
  • Форк не использует в работе библиотеку JQuery, весь код полностью написан на чистом JS.
  • Форк не потребляет резурсов в покое и автоматически выгружается из памяти (быстрая выгрузка).
  • Форк работает полностью автономно, не использует синхронизацию и не имеет сохраняемых настроек.
  • Полностью вырезана вся гуглоаналитика и сбор статистики, удалены ссылки на гуглозин и предложения "заценить".
  • Есть пре-фильтр, исключающий из обработки "непроверяемые" ссылки (локальные, служебные, почтовые и т.п.).
  • Функция перепроверки только "битых" ссылок "медленным" методом для получения гарантированного результата.
  • Есть "микро-хак" для обхода проблем при пакетных проверках страниц со смешанным содержимым (https/http).
  • Выше скорость работы за счёт оптимизации кода, вычищен весь "мусор", исправлены мелкие баги оригинала.
  • Сделан полноценный перевод интерфейса на русский, добавлены подробные всплывающие подсказки.
  • Изменено расположение кнопки вызова с тулбара на омнибокс (в версиях 60+ кнопка принудительно на тулбаре).
  • Убран API вызова по хоткею – как не имеющий практической ценности (дублируется "Быстрыми клавишами").
  • Доработан интерфейс и стили, удалены лишние файлы (размер уменьшен в 6 раз).

Возможные ограничения и известные проблемы

1. Не все рабочие FTP-ссылки (и хосты) корректно обрабатываются, возвращая код ошибки 0.

Решения нет, проверка только переходом по ссылкам, связано с политикой обработки XHR-запросов конкретными хостами. Во избежание подобных "граблей" в аддоне ограничен запуск проверки на FTP-хостах (ссылки на FTP – проверяются).

2. Аддон не работает в Chrome WebStore (проверка не запускается).

Решения нет, проверка только переходом по ссылкам, связано с невозможностью запуска контент-скрипта на страницах CWS. Во избежание ошибок в аддоне отключён запуск проверки на страницах CWS (ссылки на CWS с других страниц проверяются).


Технические детали разработки

Ниже приведены технические особенности расширения и некоторые подробности по исходному коду.

Особенности работы с запросами при проверке ссылок

Механизм проверки ссылок основан на отправке и анализе XHR-запросов по URL ссылок, найденных на странице.

Для ускорения процесса "пакетной" проверки производится пре-фильтрация, исключающая "непроверяемые" ссылки.

Фильтр исключает все локальные ссылки и ссылки с неподдерживаемыми (для XHR) протоколами (mailto:/news:/irc:…). К таким ссылкам относятся и внутристраничные якоря, проверка которых не имеет смысла для текущей страницы.

Проверка в "пакетном" режиме (вызов через омнибокс или пкм "Проверить все ссылки") - быстрая, использует метод 'HEAD' в XHR-запросах (корректность проверки при этом ниже). Проверка ссылок "поштучно" (вызов из контекстного меню ссылки "Проверить эту ссылку") использует метод 'GET', дающий более точный результат.

Исходя из этого – если результат быстрой проверки вызывает сомнения, проверяем нужные ссылки "поштучно".

Кроме того, можно "пакетно" перепроверить ссылки с ошибками, нажав соответствующую кнопку в списке* ссылок. При этом используется метод 'GET', дающий более корректный результат (как и при "поштучной" проверке).

* Список ссылок, прошедших проверку, вызывается щелчком по соответствующему полю счётчика в блоке результатов. Следует помнить, что пустой список НЕ вызывается (при отсутствии ссылок, если значение счётчика в поле равно 0).

Для обхода проблем с запросами при смешанном содержимом (https/http) добавлен "микро-хак", согласующий протоколы. Работает только при пакетных проверках на https-страницах, автоматически меняет протокол http-ссылок на https. При этом не исключены ошибки из-за проблем с протоколом на проверяемом хосте (ERR_SSL...CIPHER_MISMATCH и т.п.).

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

Подробности выполнения отдельных XHR-запросов смотрим в консоли страницы (с отражением ошибок запросов).

Исходный код, интерфейс и API

Link Checker RU не использует для работы никакие сторонние библиотеки (привет любителям JQuery)).

В коде применён только чистый JS (ES5), все неподдерживаемые в "старых" браузерах функции заменены на аналоги.

Скрипты работают в "строгом" режиме – для гарантированного выполнения функций и облегчения отлова ошибок.

Аддон загружается только в момент вызова, не имеет фонового процесса и не занимает память в покое.

Кроме того, добавлена функция ускоренной выгрузки расширения из памяти после выполнения требуемых действий.

Расширение работает полностью автономно, какие-либо настройки отсутствуют, синхронизация не используется.

Аддон имеет модульную структуру: автоматически инжектируемый конктент-скрипт, работающий непосредственно на проверяемой странице (файл linkchecker_cs.js), инжектируемый файл стилей интерфейса управления проверками на странице (файл linkchecker_cs.css) и фоновый скрипт для запуска процесса проверки (файл linkchecker_bg.js)

Для работы с содержимым страниц задействуется API chrome.tabs. С помощью этого API осуществляется непосредственный запуск проверки и отрисовка будущего "каркаса" блока с данными.

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

Для запуска проверки всех ссылок на текущей странице при щелчке по кнопке в омнибоксе применяется API chrome.pageAction. Для ускоренной и гарантированной отрисовки кнопки на всех вкладках используется API chrome.declarativeContent.

В контекстном меню страницы интерфейс аддона представлен единственным пунктом, доступным на свободном поле страницы. При вызове контекстного меню на ссылке, наименование пункта меню соответственно меняется и проверка выполняется только для единичной ссылки. Для работы с контекстным меню применяется API chrome.contextMenus.

Для обеспечения корректной работы аддона на всех вкладках, включая локальные страницы, а также для ограничения неподдерживаемых* протоколов, в манифесте запрашиваются разрешения [ "http://*/*", "https://*/*", "ftp://*/*", "file:///*/*" ].

* Для контент-скрипта установлено отдельное разрешение, исключающее его загрузку на FTP-хостах.

Дополнительные примечания по коду

Практических ограничений по версии браузера не имеется, используемые API работают в версиях 29+.

Язык интерфейса – только русский (локализация жёсткая, зашита в коде), другие* локализации отсутствуют. Это связано со значительным упрощением кода, а также с тем, что при создании расширения автор в первую очередь ориентируется на русскоязычных пользователей.

* Впрочем, если "дело пойдёт", прикрутить ещё и "басурманский" не является особой проблемой…)



Технические детали Бармалей
Бармалей 03.10.2019 17.10.2020 258 0.0

Общие технические сведения о разработке
Статус разработки:Активная, поддерживается автором
Язык интерфейса:Русский
Версия браузера:29+
Протестировано в:SRWare Iron 29/31/49 + 360EE11/CR69
Технологии и API:Чистый JavaScript (ES5), API: content-script, tabs, contextMenus, declarativeContent, pageAction

Поделиться

Всего комментариев: 0
close