…Как понимаю, вы уже прочитали общий обзор и хотите поглубже разобраться что и как в этом аддоне…) Всё верно, работа с любым расширением требует знания и понимания всех его особенностей, это позволит вам избежать "непонятных" проблем при эксплуатации аддона. В этой статье:
Отличия от оригинала и аналоговПо отношению к исходному аддону и его аналогам в 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-запросов смотрим в консоли страницы (с отражением ошибок запросов). Исходный код, интерфейс и APILink 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 |