' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'')//-->
…Как понимаю, вы уже прочитали общий обзор и хотите поглубже разобраться что и как в этом аддоне…)
Всё верно, работа с любым расширением требует знания и понимания всех его особенностей, это позволит вам избежать "непонятных" проблем при эксплуатации аддона.
В этой статье:
По отношению к исходному аддону и его аналогам в Link Checker RU имеются следующие отличия:
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-запросов смотрим в консоли страницы (с отражением ошибок запросов).
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+.
Язык интерфейса – только русский (локализация жёсткая, зашита в коде), другие* локализации отсутствуют. Это связано со значительным упрощением кода, а также с тем, что при создании расширения автор в первую очередь ориентируется на русскоязычных пользователей.
* Впрочем, если "дело пойдёт", прикрутить ещё и "басурманский" не является особой проблемой…)