' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'')//-->
Отличия от аналогов и некоторые технические подробности. Применяемые технологии и API. Особенности использования.
…Как понимаю, общий обзор вы уже прочитали и теперь хотите разобраться что и как в этом аддоне…)
Всё верно, работа с любым расширением требует знания и понимания всех его особенностей, это позволит вам избежать "непонятных" проблем при эксплуатации аддона.
В этой статье:
По большому счёту, Copy URL CR.RU не является "единственным и уникальным" копировщиком ссылок, но для "осознанного и правильного выбора" следует знать (и понимать) различия между этим аддоном и его "коллегами".
По отношению к исходному аддону и его аналогам в этом форке имеются следующие основные отличия:
Кроме вышеуказанных, есть также и другие, чисто технические отличия, которые также следует учитывать.
Для начала сто́ит упомянуть, что кроме Copy URL CR.RU существует ещё один альтернативный вариант исходного расширения – Game Edition: Репак CopyUrl_RpR, сделанный в июле 2016 года на основе оригинальной версии 1.7 и отличающийся от оригинала выгрузкой из памяти и "жёсткой" русификацией на уровне исходного кода (смотрим архивную копию этого форка в файловом архиве проекта).
В связи с этим иногда могут возникать вопросы "а чем твоё круче и почему", на которые есть аргументированный ответ, раскрывающий основные преимущества Copy URL CR.RU с технической точки зрения:
Цитата: Есть ли существенная разница между твоей версией и репаком, размещённым на game-edition несколько лет назад? если честно - не смотрел, что "там" выкладывалось.. я лепил изначально с оригинала.. потому как первый репак я сделал за пару лет ДО оного репака - в посте история релизов есть..) потом функционал не менялся, а тут случайно попался на глаза оригинал 1.8.5 с контекстным меню, пришлось допилить.. ..но раз уж всплыл вопрос - качнул/посмотрел форка с гейм-едишн.. нескромно, может, но скажу - мой лучше! :)) потому как "там" не менялся общий подход оригинала и реализация самого механизма копирования не самая лучшая.. итак, судя по коду из CopyUrl_RpR_16.07.2016.rar: 1) как и в оригинале - на все страницы лепится инжект из двух скриптов, у моего - инжект отсутствует в принципе! 2) следствие из п.1 - мой работает везде - и в гуглозине тоже, а оригинал/репак с ГЕ по определению этого не могут сделать..) 3) связь кнопки/меню с инжектом - через апи сообщений, шо в данном случае не нужно - всё нужное получается и так..) 4) авторы оригинала/репака вынуждены ставить лишние разрешения в манифесте, у меня сделано проще.. 5) в оригинале/репаке с ГЕ один и тот же скрипт грузится дважды - в фоне и в инжекте - неоптимально, мягко говоря.. 6) я делал свой первый репак на базе исходной версии 1.3 и вставил иконки прямо в скрипт, а в ГЕ-форке это "слизано".. х) в той версии, кстати, у автора оригинала ещё всё было красиво - и скрипт был один и никаких инжектов не было.. 7) функция отрисовки иконки омнибокса в оригинале/форке с ГЕ сделана хуже - потому как постоянно "дёргает" фоновый скрипт.. в смысле - "там" скрипт вызывается при каждом изменении вкладок, а у меня отрисовка НЕ связана с вызовом бэкграунда.. 8) с т.з. "выгрузки из памяти" - в оригинале её нет, а в форке с ГЕ она не имеет смысла, потому как см.п.7.. =) 9) в оригинале и форке с ГЕ контекстное меню различает только ссылки и картинки - так в коде скрипта заложено.. у меня в крайней версии - ещё и фреймы (типа ембедов с ютубы), ну и саму страницу, если под курсором нет ссылок.. 10) у меня в крайней версии код обработки урлов сущессно упрощён за счёт сведения кучи функций в одну.. 11) в форке с ГЕ не весь мусор за автором оригинала подчищен, причём - он был закоменчен самим автором в оригинале.. сопссно, в оригинале самое ценное - функция ковертора пуникода домена, а вся кириллица в урл - одной строчкой делается.. поэтому я и взялся его перепиливать.. кстати, в исходной (1.3) версии гугло-аналитики не было, это потом автор "охренел"..)) вопчем, подытожу - у меня аддон грузится в память только при вызове функций и не лезет скриптами на сами страницы.. кроме всего прочего, мой код компактнее и работает "легче", сталыть - быстрее и меньше грузит систему в целом.. ну и по "автовыгрузке" - в последней версии мой висит активным максимум секунду-полторы..)
Цитата: Есть ли существенная разница между твоей версией и репаком, размещённым на game-edition несколько лет назад?
если честно - не смотрел, что "там" выкладывалось.. я лепил изначально с оригинала.. потому как первый репак я сделал за пару лет ДО оного репака - в посте история релизов есть..) потом функционал не менялся, а тут случайно попался на глаза оригинал 1.8.5 с контекстным меню, пришлось допилить.. ..но раз уж всплыл вопрос - качнул/посмотрел форка с гейм-едишн.. нескромно, может, но скажу - мой лучше! :)) потому как "там" не менялся общий подход оригинала и реализация самого механизма копирования не самая лучшая.. итак, судя по коду из CopyUrl_RpR_16.07.2016.rar:
1) как и в оригинале - на все страницы лепится инжект из двух скриптов, у моего - инжект отсутствует в принципе!
2) следствие из п.1 - мой работает везде - и в гуглозине тоже, а оригинал/репак с ГЕ по определению этого не могут сделать..)
3) связь кнопки/меню с инжектом - через апи сообщений, шо в данном случае не нужно - всё нужное получается и так..)
4) авторы оригинала/репака вынуждены ставить лишние разрешения в манифесте, у меня сделано проще..
5) в оригинале/репаке с ГЕ один и тот же скрипт грузится дважды - в фоне и в инжекте - неоптимально, мягко говоря..
6) я делал свой первый репак на базе исходной версии 1.3 и вставил иконки прямо в скрипт, а в ГЕ-форке это "слизано".. х) в той версии, кстати, у автора оригинала ещё всё было красиво - и скрипт был один и никаких инжектов не было..
7) функция отрисовки иконки омнибокса в оригинале/форке с ГЕ сделана хуже - потому как постоянно "дёргает" фоновый скрипт.. в смысле - "там" скрипт вызывается при каждом изменении вкладок, а у меня отрисовка НЕ связана с вызовом бэкграунда..
8) с т.з. "выгрузки из памяти" - в оригинале её нет, а в форке с ГЕ она не имеет смысла, потому как см.п.7.. =)
9) в оригинале и форке с ГЕ контекстное меню различает только ссылки и картинки - так в коде скрипта заложено.. у меня в крайней версии - ещё и фреймы (типа ембедов с ютубы), ну и саму страницу, если под курсором нет ссылок..
10) у меня в крайней версии код обработки урлов сущессно упрощён за счёт сведения кучи функций в одну..
11) в форке с ГЕ не весь мусор за автором оригинала подчищен, причём - он был закоменчен самим автором в оригинале.. сопссно, в оригинале самое ценное - функция ковертора пуникода домена, а вся кириллица в урл - одной строчкой делается.. поэтому я и взялся его перепиливать.. кстати, в исходной (1.3) версии гугло-аналитики не было, это потом автор "охренел"..)) вопчем, подытожу - у меня аддон грузится в память только при вызове функций и не лезет скриптами на сами страницы.. кроме всего прочего, мой код компактнее и работает "легче", сталыть - быстрее и меньше грузит систему в целом.. ну и по "автовыгрузке" - в последней версии мой висит активным максимум секунду-полторы..)
Короче говоря, в Copy URL CR.RU всё сделано "как надо", всё компактно и удобно для пользователя.)
Но если всего этого мало – смотрим также на…
При разработке Copy URL CR.RU изначально ставилась задача расширения полезного функционала по отношению к исходному аддону.
Ниже указаны ключевые дополнительные функции, добавленные в этом аддоне, с указанием версий, начиная с которых они были реализованы.
С версии 2018.5.17 кроме простого копирования URL объектов с текущей страницы доступно:
С версии 2018.5.20 для объектов текущей страницы также доступно:
Важные примечания по этим функциям:
В частности, включение подписки Fanboy's блокирует выполнение штатного букмарклета сервиса цитирование. Для решения этой проблемы следует добавить в пользовательские фильтры блокировщика разрешающие правила (пример для uBlock):
@@||tldrify.com/static/*/sharebox.$script,stylesheet,domain=tldrify.com @@||tldrify.com/sharebox?$generichide
С версии 2019.1.19 для изображений текущей страницы доступно:
С версии 2019.1.25 для изображений текущей страницы дополнительно доступно:
С версии 2020.10.15 для объектов текущей страницы дополнительно доступно:
С версии 2020.11.25 для объектов текущей страницы дополнительно доступно:
Ниже приведены некоторые технические подробности по исходному коду и отдельным функциям расширения.
Copy URL CR.RU не использует для работы никакие сторонние библиотеки (привет любителям JQuery)).
В коде применён только чистый JS (ES5), все неподдерживаемые в "старых" браузерах функции заменены на аналоги.
Скрипт работает в "строгом" режиме – для гарантированного выполнения функций и облегчения отлова ошибок.
В аддоне отсутствует постоянный фоновый процесс, он не расходует ресурсы браузера "в покое", все функции выполняются с помощью автозагружаемого скрипта, который также автоматически выгружается* из памяти после отработки необходимых действий.
* С версии 2018.5.16 – быстрая выгрузка через 1-1,5 секунды после завершения копирования. …теоретически – можно выгружать и немедленно, но нам же ещё иконку надо "покрасить"…))
Для вызова функции копирования URL текущей вкладки применяется стандартный API chrome.pageAction. Для ускоренной и гарантированной отрисовки кнопки на всех вкладках используется API chrome.declarativeContent.
Для вызова дополнительных функций из меню кнопки в омнибоксе и для работы с контекстом страницы применяется стандартный API chrome.contextMenus.
Для работы с веб-страницами в активных вкладках задействуется API chrome.tabs. Также применяется разрешение activeTab, упрощающее отдельные действия на текущих страницах.
Для работы функций, связанных с цитированием, применяется инжекция скрипта в текущую страницу (API chrome.tabs). По этой причине такие функции не будут работать на служебных страницах и в гуглозине.
Для обеспечения корректной работы аддона с любыми веб-сайтами и локальными страницами в манифесте запрашивается разрешение [ "<all_urls>" ]. Со служебными страницами аддон напрямую не работает – только копирование URL, другие сервисные функции на них недоступны.
Для помещения в буфер обмена результатов работы в манифесте запрашивается разрешение [ "clipboardWrite" ].
Настройки автономны и сохраняются только в локальном хранилище самого аддона, синхронизации нет. Для работы с хранилищем применяется API chrome.storage. Запрос отдельного разрешения [ "storage" ] в манифесте при этом необязателен, хотя и указан (в качестве задела на будущее)).
В версиях браузеров 49+ часть функций контекстного меню дублируется в меню иконки в омнибоксе:
В версиях браузеров 63+ эти же функции контекстного меню отображаются в меню кнопки на тулбаре:
С версии 2018.5.17 там же есть опция отключения контекстного меню страницы (в омнибоксе меню есть всегда). При выключении контекстного меню страницы будут недоступны все функции, связанные с копирование её контекста.
В более старых версиях браузера дублирования меню в омнибоксе нет, контекстное меню страницы неотключаемое.
Кроме пунктов, отвечающих за выполнение функций копирования, в меню страницы содержатся дополнительные настройки в виде переключателей сервисных опций. Назначение пунктов меню интуитивно понятно из их названий:
Во всех версиях состояние аддона индицируется изменение цвета значка в омнибоксе:
Такой значок означает успешное завершение любой из операций копирования/преобразования URL. Значок меняется на дефольтный через 1 секунду, никаких сообщений об успешном выполнении действий не выдаётся.
Такой значок означает наличие ошибок в любой из операций копирования/преобразования URL. Этот значок не меняется на текущей вкладке до следующего вызова любой из функций, напоминая о проблеме.
Начиная с версии 2018.5.20 при ошибках также выводится сообщение и событие заносится в консольный лог.
Независимо от результата выполнения любой из функций, аддон автоматически выгружается из памяти.
Практических ограничений по версии браузера не имеется, используемые API работают в версиях 29+.
При разработке расширения часть API обновлена под современные стандарты, на версиях браузера старше 29/31, возможно, не будет* работать совсем.
* Если кому-то это нужно – проверяйте самостоятельно и пишите "фидбэк про иссуй", будем думать.)
Язык интерфейса – только русский (локализация жёсткая, зашита в коде), другие* локализации отсутствуют. Это связано со значительным упрощением кода и повышением скорости его работы, а также с тем, что при создании расширения автор в первую очередь ориентируется на русскоязычных пользователей.
* Впрочем, если "дело пойдёт", прикрутить ещё и "басурманский" не является особой проблемой…)