Context: IP Geolocation RU : Что "под капотом"
Опубликовано: Бармалей · 04.02.2019 · 00:02 ••• Обновление: 17.10.2020 · 12:15 0

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

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

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


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

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

  • Форк не имеет фонового процесса и не занимает память в покое, после получения данных – быстрая автовыгрузка.
  • Форк работает на всех страницах, в т.ч. – локальных, служебных и на "анально-огороженных" сайтах типа CWS.)
  • Кроме страниц и ссылок "понимается" любой объект под курсором – картинка, фрейм, аудио/видео, текст и пр..
  • Убрана авто-вставка скриптов в страницы, инжектирование фрейма производится только при вызове из меню.
  • После нажатия кнопки "Закрыть" инфо-блок полностью удаляется из кода страницы и не занимает память.
  • Кроме этого, с версии 2019.2.6 в код страницы не инжектируются стили, вся загрузка – в отдельном фрейме.
  • Доработан запрос гео-данных, устранена проблема работы со смешанным http/https-контентом при выводе данных.
  • В отличие от оригинала в форке запрашиваются, получаются и отображаются все доступные поля данных.
  • В инфо-блоке добавлен показ флага страны, на территории которой размещён сервер (локальный gif-файл).
  • Добавлена загрузка и вывод Яндекс-карты физического места размещения сервера + переход к её онлайн-версии.
  • Добавлен переход на whois-сервисы для просмотра полной информации о хосте (smart-ip.net и whois.ru).
  • Кроме того: ссылки перехода на страницу whois-сервиса по данным о корневом домене и обратном DNS.
  • Упрощён вывод инфо-блока гео-данных: он сделан фиксированным, на практике этого более чем достаточно.
  • Доработан внешний вид и стилистика инфо-блока гео-данных, выполнен полный перевод аддона на русский.
  • Добавлено декодирование отображаемых URL для получения читабельных ссылок (в частности – с кириллицей).
  • Добавлено закрытие фрейма (или окна) инфо-блока по клавише <Esc> (в любой момент, с зачисткой своего кода).
  • Добавлен вызов инфо-блока для URL текущей вкладки по горячей клавише ALT+SHIFT+G.
  • Добавлен запуск тестов IP-адреса: доступность хоста, проверка по спам-базам, оценочный пинг и трассировка.
  • С версии 2019.3.6 также доступны: проверка SSL-сертификата и/или SSL-тест возможностей сервера.
  • Добавлена проверка совместимости локального хоста с IPv6 (только при запуске на локальных страницах).
  • Добавлена опция отправки запроса гео-данных через прокси проекта ProxyPy.org (серверы на *.appspot.com).
  • Добавлен запрос сведений о применяемых на сервере веб-технологий (сервисы w3techs.com и builtwith.com).
  • Добавлена автообработка "анально-огороженных" доменов* с выводом результатов в окне вместо фрейма.
    * Как и при запуске на локальных страницах или в гуглозине, "огороженность" конкретного домена оценивается и запоминается автоматически.

Особенности эксплуатации и условия применения

При всей кажущейся внешней простоте, работа с расширением "Context: IP Geolocation" предусматривает знание и понимание некоторых важных моментов для его корректной и беспроблемной эксплуатации.

Итак, о чём желательно помнить при работе с этим расширением:

1. Для получения гео-данных используется бесплатный API whois‑агрегатора ip‑api.com.

При работе с ним следует помнить об ограничении – не более 45 запросов* в минуту с одного IP‑адреса!
* На момент начала разработки было ограничение до 150 запросов, текущую политику сервиса по лимитам смотрим здесь.

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

Ранее сервис декларировал возможность ручного разбанивания IP-адреса, на текущий момент такая функция недоступна и самостоятельный вывод из "чёрного списка" невозможен. Это, предположительно, связано с текущей политикой монетизации сервиса, поэтому будьте внимательны и не переусердствуйте с запросами.)

2. В некоторых редких случаях сервис IP-API может выдавать ошибку доступа (или превышение таймаута – 15 сек.).

Для решения этой проблемы в аддоне предусмотрена проверка, запуск – динамически создаваемой (только при ошибке) кнопкой "Проверить доступ". При недоступности сервиса с текущего IP‑адреса можно проверить его работоспособность и другим способом (онлайн). Эта же проверка запускается по той же кнопке, при ошибке быстрой проверки, действие по её нажатию соответственно изменяется.

3. При отправке запроса гео-данных через прокси следует помнить о том, что:

Прямой запрос на подтверждение использования прокси выдаётся однократно и только при первой установке.

Режим переключается соответствующей "галкой" в строке "Анонимный прокси" только при выводе в попап-окне.

При ошибках доступа через прокси режим можно отключить и непосредственно в окне сообщения об ошибке.

4. Все сообщения о возможных ошибках обработки "неправильных" URL выдаются текстом в инфо-блоке.

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

5. В общем случае инфо-блок с данными выводится в левом верхнем углу текущей страницы поверх её содержимого.

Если программная инжекция кода недоступна, выходная инфо-таблица формируется в отдельном попап-окне. Оба варианта вывода работают одинаково, все функции встроенного инфо-блока и отдельного окна аналогичны.

6. В аддоне нет прямой инжекции контент-скриптов и стилей – всё грузится в отдельный (собственный) фрейм.

В текущую страницу (если возможно) при этом добавляется только динамический временный код, без инжекта CSS. Свой фрейм позволяет исключить перекрёстное влияние имеющихся на странице CSS, в частности – эта накладка была очень хорошо заметна на этом сайте…)


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

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

Проблемы могут проявляться при изменениях функций сервисов или из-за частных ошибок сети или браузера. Подобные "нестыковки" решаются в новых версиях аддона заменой сервисов на аналогичные.

2. SRWare Iron 31: крэш браузера при вызове в меню функций, связанных с расширениями (в т.ч. и своих).

Проблема проявляется в контекстном меню инфо-блока и только если он отображается в отдельном окне, во фрейме всё работает нормально. Это не является проблемой собственно аддона: проверка на версиях SRWare Iron 29/36/49 и в других браузерах такой проблемы не выявила.

3. Хром-браузеры версий 57+: могут быть проблемы с отображением данных на сайте smart-ip.net.

Некоторые страницы и данные с этого сайта просматриваются при переходах с отдельных ссылок или кнопок в аддоне. Это не является проблемой собственно аддона: все вопросы по неработоспособности страниц – к владельцам сайта.

4. Хром-браузеры версий 70+: могут быть отказы в работе по http-протоколу (незащищённому).

Это не является проблемой собственно аддона: все вопросы по отламыванию http-протокола – к гуглу…)

5. Возможный конфликт с uBlock Origin с подпиской EasyPrivacy: запрет запросов к сервису гео-данных.

Обсуждение проблемы смотрим отсюда и далее, решение – отключить эту подписку в блокировщике или настроить исключения для сайта ip-api.com. Это не является проблемой собственно аддона и относится только к частной настройке различных блокировщиков.


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

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

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

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

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

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

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

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

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

Расширение работает полностью автономно. Настройки также автономны и сохраняются только в локальном хранилище самого аддона, синхронизации нет. Для работы с хранилищем применяется API chrome.storage. Запрос отдельного разрешения [ "storage" ] в манифесте при этом необязателен и не указан.

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

Прямого запроса прав доступа для указанного API при этом не требуется, в манифесте аддона запрашивается только разрешение activeTab, упрощающее действия на текущих страницах.

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

В контекстном меню страницы интерфейс расширения представлен единственным пунктом, доступным на всех элементах страницы. Для работы с контекстным меню применяется стандартный API chrome.contextMenus.

Для вызова функции создания инфо-блока по горячей клавише используется API chrome.commands.

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

* При этом не требуется указания разрешения на работу с локальными файлами, но, хотя в блоке аддона на странице chrome://extensions соответствующий переключатель отсутствует, построение фрейма для таких страниц доступно полностью.

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

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

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

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

Решпекты и пивас :)

Личная благодарность автора в сочетании с вышеуказанным – камрадам:



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

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

Поделиться

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