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