' +'' +'' +'' +'' +'' +'' +'' +'' +'' +'')//-->
Дополнительный материал к статье Copy URL F2 Tab Mod : Копируем по хоткею. Обзор и описание пользовательских настроек и методов управления работой скрипта.
В этой статье:
По умолчанию для вызова функции копирования используется клавиша F2 (или дублирующий её двойной щелчок мышью в любом месте текушей страницы). Данные копируются в виде заголовка текущей вкладки в двойных кавычках, после него с новой строки добавляется декодированный (читабельный) URL вкладки в квадратных скобках, затем, с новой строки, выделенный на текущей странице текст (с минимальным форматированием – разделением на строки и абзацы).
В итоге содержимое буфера обмена будет выглядеть, например, вот так:
"Федеральные органы исполнительной власти России" [ http://россия.рф/main/ministry/isp-vlast44.html ] Правительство Российской Федерации
Необходимо помнить, что захват, преобразование и копирование выделенного текста работает только при вызове по горячей клавише или по средней кнопке мыши, иначе не исключены ложные захваты по двойному щелчку мыши. После выполнения копирования выделенная область автоматически сбрасывается (выделение снимается).
Как уже сказано, при желании можно вручную изменить шаблон форматирования данных. Начиная с базовой версии изменение этих настроек производится напрямую в коде функций скрипта. В текущей версии для этого следует изменить соответствующую текстовую переменную в блоке настроек:
var set = { tmpl: '"%title%"\n[ %url% ]\n%sel%',
Кроме выделенных элементов, являющихся соответственно идентификаторами заголовка (%title%), URL (%url%) текущей вкладки и выделенного на ней текста (%sel%), вы можете менять шаблон произвольным образом, вплоть до исключения из шаблона любого из идентификаторов (при этом, понятно, в буфере обмена его значение будет отсутствовать).
Например, если выходной шаблон упростить до такого:
tmpl: '%url%'
в буфер обмена будет скопирован только декодированный URL вкладки (из примера выше):
http://россия.рф/main/ministry/isp-vlast44.html
В текущих версиях скрипта кроме общего шаблона также можно использовать и дополнительные вариации оформления (альтернативные шаблоны), отрабатываемые при вызове копировщика с зажатыми клавишами ALT, CTRL или SHIFT.
Кроме того, при желании можно вручную изменить и горячую клавишу копирования. Для этого следует изменить в блоке настроек соответствующий код клавиши в скрипте (выделен цветом):
var set = { … kBtn: 'F2',
Правильные коды всех клавиш можно самостоятельно определить, например, на этой странице или на этом сайте.
В принципе, можно никуда не ходить, а просто ввести в консоли Инструментов разработчика (F12 на любой странице) вот такой код:
document.addEventListener('keydown', function(e){console.log(e)})
…затем на этой же странице понажимать нужные клавиши и посмотреть результат в консоли. :)
Начиная с версии 2021.5.25 можно вручную изменить и другие настройки. Общий принцип включения настроек – их непустое и ненулевое значение (не '', 0, false, null). Для удобства работы все доступные настройки сведены в одну общую переменную set={...}, к каждому параметру добавлены комментарии прямо в коде (на английском языке).
Соответствующие строки переменной set={...} указаны ниже (значения по умолчанию выделены цветом).
Вы можете переопределить событие ожидания нажатия горячей клавиши (по умолчанию – 'keydown'). Соответствующее событие задаётся параметром kEvt:
var set = { … kEvt: 'keydown',
Установка этого параметра в 0 отключает ожидание вызова (и срабатывание) копирования по горячей клавише.
Следует отметить ещё один нюанс, решающий потенциальную проблему "повтора" клавиш (многократных вызовов копировочной функции при удержании горячей клавиши). Сам по себе повтор никак не влияет на результат, но можно и принципиально исключить эту ситуацию, изменив способ отслеживания нажатий клавиш так, чтобы функция вызывалась не в момент нажатия, а в момент отпускания клавиши (выделено цветом):
var set = { … kEvt: 'keyup',
Начиная с версии 2021.5.30 в скрипте добавлена поддержка старых версий браузеров (гарантируется его работа на версиях 29+). Связано с тем, что в браузерах версий старше CR48/FF38 отсутствует поддержка параметра "code", задаваемого переменной kBtn и проверяемого по умолчанию во всех более новых браузерах.
Вместо текстового значения "code" в старых браузерах проверяется цифровой код горячей клавиши ("which") Собственный хоткей при этом задаётся изменением кода клавиши в параметре kWhi:
var set = { … kWhi: 113,
По умолчанию установлен код, соответствующий клавише F2 (113). Правильные коды других клавиш можно определить самостоятельно указанными выше способами.
Кроме того, для корректного перехвата горячей клавиши в старых браузерах проверяется ещё один параметр, "location" (или "keyLocation", в зависимости от версии браузера), определяющий место расположения клавиши.
Этот параметр имеет значение в случае использования одной из па́рных клавиш (ALT, CTRL или SHIFT). Место расположения задаётся изменением значения в параметре kLoc:
var set = { … kLoc: 0,
Этот параметр по умолчанию равен 0 и не должен меняться для всех одиночных клавиш. Для левых па́рных клавиш ALT, CTRL и SHIFT устанавливается в 1, для правых – 2.
Обе вышеуказанные настройки предназначены только для старых браузеров. Они игнорируются (не проверяются) и никак не влияют на работоспособность скрипта в браузерах CR48+/FF38+.
Запуск копирования с помощью щелчков мыши (по умолчанию – двойной щелчок). Соответствующее событие задаётся параметром mEvt:
var set = { … mEvt: 'dblclick',
Установка в 0 отключает ожидание вызова (и срабатывание) копирования по щелчку мыши. Может быть изменено на 'mouseup' (срабатывание по отпусканию).
При этом можно изменить и ожидаемую кнопку (по умолчанию – средняя кнопка мыши, колёсико). Соответствующий код кнопки задаётся параметром mBtn:
var set = { … mBtn: 2,
Исходя из общей логики использования кнопок мыши, менять на другие не рекомендуется… :)
Для двойного щелчка можно использовать и расширенное копирование по отдельному шаблону. Функция введена с версии 2021.8.19, позволяет в один клик захватывать текст сложных объектов. Основная цель – простое копирование больших фрагментов текста без необходимости их выделения. Соответствующий режим расширенной обработки дабл‑клика задаётся параметром mAdc:
var set = { … mAdc: 1,
По умолчанию* режим включен, установка параметра в 0 отключает его (копирование как в начальных версиях).
* Если параметр просто включен (равен 1/true), будет выполнена обработка элемента под курсором, на котором был выполнен двойной щелчок, с использованием шаблона по умолчанию. При желании (и навыках)) вы можете написать и использовать свой собственный обработчик для расширенного копирования, задав вместо логического значения произвольную функцию, работающую в пределах самого документа.
При этом не потребуется менять код самого скрипта, поскольку в нём уже заложена проверка этого параметра по его типу – если это не число (или не true), а функция, обработчик по умолчанию будет автоматически отключён с передачей управления событием вашей "самописной" функции.
Например, используя вместо значения по умолчанию вот такой код:
var set = { … mAdc: function(e){return document.documentElement[e.altKey?'outerHTML':'outerText']},
…при двойном щелчке с зажатой клавишей ALT полностью скопируется весь html‑код досумента, а без этой клавиши – полный текст всего просматриваемого документа. Можно придумать и другие варианты обработки, всё зависит только от вашей фантазии и потребностей. :)
Маленькая подсказка: в качестве параметра "e" в функцию передаётся событие (наш двойной щелчок), сам элемент под курсором, соответственно, полностью определяется его свойством "e.target", с ним вы можете оперировать как угодно, получая текущий (или любой другой) элемент документа относительно этого значения.
Следует понимать, что расширенное копирование будет доступно только при установке срабатывания копировщика по двойному щелчку мыши! При настройке копирования по щелчку СКМ эта функция игнорируется, копировщик работает как обычно.
В целях исключения ненужного вызова копировщика при щелчке средней кнопкой на ссылках (например, для их открытия в новом окне) в скрипте производится проверка объекта* под курсором. Функция введена с версии 2021.5.29 (упрощённая, только для текстовых ссылок), доработана в версии 2021.5.30 (обработка любых ссылок, опционально).
* Если этот объект является ссылкой, при включенной проверке копирование НЕ выполняется, щелчок обрабатывается стандартными средствами браузера. Если же ссылка под курсором содержит пустой атрибут "href" (или он отсутствует) либо является ссылкой на скрипт (начинается с "javascript:"), копирование выполняется как обычно, отработка нажатия СКМ при этом также не блокируется.
Опциональный запуск проверки задаётся параметром notA:
var set = { … notA: 1,
По умолчанию проверка включена, установка параметра в 0 отключает её (копировщик отработает и на ссылках). Исходя из общей логики использования кнопок мыши, отключать не рекомендуется.
В целях исключения ненужного вызова копировщика при двойном щелчке на текстовых полях (например, в поисковых и других формах) в скрипте производится дополнительная проверка объекта* под курсором. Эта функция введена с версии 2021.6.6, работает аналогично обработке исключений для СКМ на ссылках.
* Если этот объект является текстовым полем или формой (теги FORM, INPUT, TEXTAREA), при включенной проверке копирование НЕ выполняется, двойной щелчок обрабатывается стандартными средствами браузера (как правило это установка выделения). Во всех остальных случаях копирование выполняется как обычно.
Эта проверка работает только при установке срабатывания копировщика по двойному щелчку мыши! При настройке копирования по щелчку СКМ эта проверка игнорируется, копировщик вызывается как обычно.
Опциональный запуск этой проверки также задаётся параметром notA:
По умолчанию проверка включена, установка параметра в 0 отключает её (копировщик отработает как обычно). Исходя из общей логики использования кнопок мыши, отключать не рекомендуется.
Использование конвертора Punicode (по аналогии с расширением Copy URL CR.RU). Если включено (по умолчанию) – URL домена преобразуется в читабельный вид ("россия.рф" в примере выше). Соответствующая обработка задаётся параметром puny:
var set = { … puny: 1,
Установка в 0 отключает конвертор Punicode (имя домена скопируется как "xn--h1alffa9f.xn--p1ai"). Исходя из общего назначения скрипта для получения читабельных ссылок, отключать не рекомендуется.
Установка стиля визуализации срабатывания копировщика (применяется к document.body). В момент копирования временно включает заданный стиль (по умолчанию – полупрозрачность документа). Желаемый стиль задаётся параметром bCSS:
var set = { … bCSS: 'opacity:.5',
Установка в 0 отключает визуализацию процесса копирования. Значение этого параметра может быть изменено на любые применимые атрибуты (если они заданы правильно).
Таймер визуализации срабатывания копировщика (время применения стиля к телу документа). После этого таймаута стиль тела документа восстанавливается (по умолчанию – через 0,5 секунды). Желаемая задержка задаётся параметром bTim (в миллисекундах):
var set = { … bTim: 500,
Установка в 0 отключает визуализацию процесса копирования.
Очистка URL документа от концевого мусора (по аналогии с расширением Copy URL CR.RU). Если выключено (по умолчанию) – URL вкладки копируется без обработки, как есть. Соответствующее действие задаётся параметром cUrl:
var set = { … cUrl: 0,
Установка в 1 включает очистку URL во время процесса копирования.
Начиная с версии 2021.5.29 можно оперативно переключаться на дополнительные шаблоны форматирования выходных данных путём вызова копировщика с зажатыми клавишами ALT, CTRL или SHIFT. Способ вызова (хоткей или мышь) при этом не играет роли, функция выбора шаблона сработает в любом случае. Отключить* отдельные шаблоны или изменить их по своему вкусу можно вручную в соответствующих переменных блока настроек (set={...}). Для удобства работы к каждому параметру добавлены комментарии прямо в коде (на английском языке).
* Общий принцип включения проверки зажатых клавиш – непустое и ненулевое значение их управляющих параметров. Соответственно, для отключения дополнительного шаблона копировщика по какой-либо из управляющих клавиш следует установить эти значения в '', 0, false или null. По умолчанию включены (разрешены) все три управляющие клавиши.
Шаблон вывода при зажатой клавише ALT задаётся параметром aTmp:
var set = { … aTmp: '<a href="%url%">%title%</a>\n%sel%',
По умолчанию это ссылка с URL вкладки в виде html-кода с именем, равным заголовку вкладки.
Проверка зажатой клавиши ALT и обработка этого шаблона задаётся параметром aKey:
var set = { … aKey: 1,
Установка в 0 отключает проверку клавиши ALT и обработку этого шаблона.
Шаблон вывода при зажатой клавише SHIFT задаётся параметром sTmp:
var set = { … sTmp: '[url=%url%]%title%[/url]\n%sel%',
По умолчанию это форумная ссылка с URL вкладки в виде BB-кода с именем, равным заголовку вкладки.
Проверка зажатой клавиши SHIFT и обработка этого шаблона задаётся параметром sKey:
var set = { … sKey: 1,
Установка в 0 отключает проверку клавиши SHIFT и обработку этого шаблона.
Шаблон вывода при зажатой клавише CTRL задаётся параметром cTmp:
var set = { … cTmp: '[q][url=%url%]%title%[/url]\n%sel%[/q]',
По умолчанию это форумная цитата в виде BB-кода со ссылкой с URL вкладки и именем, равным заголовку вкладки.
Проверка зажатой клавиши CTRL и обработка этого шаблона задаётся параметром cKey:
var set = { … cKey: 1,
Установка в 0 отключает проверку клавиши CTRL и обработку этого шаблона.
Начиная с версии 2021.8.19, доступно расширенное форматирование по двойному щелчку, которое включается настройкой соответствующего параметра (по умолчанию включено).
Шаблон расширенного форматирования по двойному щелчку задаётся параметром snip:
var set = { … snip: '<!--\nHTML snippet: "%title%"\nGet from URL: [ %url% ]\n-->\n%sel%',
По умолчанию это закомментированный текстовый заголовок для захваченного фрагмента html‑кода, содержащий заголовок вкладки и её URL. При вызове копировщика по двойному щелчку к этому блоку добавляется захваченный фрагмент кода страницы, содержимое которого будет зависеть от зажатия клавиш ALT, CTRL, SHIFT во всех их комбинациях (всего 8 вариантов, включая отсутствие зажатых клавиш при простом двойном щелчке).
По аналогии с предыдущими шаблонами, проверка зажатых клавиш и варианты обработки этого шаблона задаются, соответственно, параметрами aKey (ALT), cKey (CTRL) и sKey (SHIFT):
var set = { … aKey: 1, cKey: 1, sKey: 1,
Установка любого из них в 0 отключает проверку соответствующей клавиши при обработке этого шаблона.
По умолчанию, если вы НЕ переопределяли параметр mAdc самостоятельно и он включен (т.е. НЕ равен 0/false/null/''), в зависимости от комбинации клавиш будут скопированы следующие части исходного документа (страницы):
С точки зрения копирования чистого текста, наибольший интерес представляет комбинация CTRL+SHIFT, позволяющая, например, в один дабл‑клик скопировать полностью всё содержимое какой‑нибудь статьи. Для этого достаточно просто щёлкать в "правильном" месте страницы… :)
Если же параметр mAdc отключен (равен 0/false/null/''), при двойном щелчке будет выполнено форматирование по стандартным шаблонам, приведённым выше. Если при этом на странице был выделен текст – как и при копировании по горячей клавише – он будет добавлен к шаблону (в начальных версиях скрипта такая добавка отсутствовала).
Как видно, во всех дополнительных шаблонах по умолчанию используется и захват выделенного фрагмента текста, который обрабатывается по тем же принципам, что и в основном шаблоне.
Проверка зажатых управляющих клавиш производится последовательно, сначала проверяется состояние клавиши ALT, затем SHIFT и, наконец, CTRL. Если не зажата ни одна из управляющих клавиш, используется основной шаблон (set.tmpl). Порядок проверки исключает неоднозначность выбора шаблона при зажатии нескольких управляющих клавиш одновременно – например, если зажаты клавиши ALT и CTRL, отработает шаблон для ALT (set.aTmp).
Опытные пользователи могут самостоятельно добавить и другие дополнительные шаблоны, обрабатываемые при зажатии комбинаций нескольких управляющих клавиш. Для этого нужно лишь добавить собственные переменные в настройки по аналогии с настройкaми шаблонов для одиночных управляющих клавиш. При этом максимальное число вариантов шаблонов может быть увеличено вдвое, с 4 до 8.
Конечно же, при этом потребуется и доработка функции проверки зажатых клавиш путём добавления и/или изменения порядка проверки и перечисления в ней всех желаемых комбинаций. В общем, если вам необходимо больше щаблонов – просто разберитесь, как это работает, а затем измените логику работы этой функции под свои предпочтения, ничего особо сложного там нет… :)
При использовании горячих клавиш в различных браузерах возможны определённые "накладки", связанные с вызовом других функций браузера (или других установленных у вас аддонов). Если вы сталкиваетесь с подобными ситуациями, можно переопределить горячую клавишу по умолчанию способом, указанным выше.
Некоторые примеры штатных конфликтов для функциональных клавиш:
Совет № 1: кроме функциональных клавиш, вы можете задействовать в качестве хоткея любую клавишу, в том числе – буквы, цифры, знаки препинания, управляющие* клавиши и т.д., главное при этом – устранить конфликт.
* Сами клавиши CTRL, SHIFT или ALT также могут служить хоткеями, при этом следует помнить, что для них есть отдельные коды на левые и правые клавиши. Пример для горячей клавиши "правый CTRL":
var set = { … kBtn: 'ControlRight',
Для браузеров версий старше CR48/FF38 такие клавиши задаются их кодом с обязательным указанием места их расположения. Пример для горячей клавиши "правый CTRL":
var set = { … kWhi: 17, kLoc: 2,
Совет № 2: также вы можете попробовать обойти конфликт, используя хоткей в сочетании* с управляющими клавишами (зажимая вместе с ним клавиши CTRL, SHIFT или ALT). В большинстве случаев это не приводит к конфликту со штатными функциями браузера, а скрипт будет в любом случае реагировать только на заданный одиночный хоткей.
* Однако, следует понимать, что в этом случае теряется одно из важных преимуществ скрипта – запуск копирования единственной клавишей.
Кроме того, в этом случае следует учитывать работу функции выбора дополнительных шаблонов, изменив соответствующие шаблоны или просто отключив их обработку, как описано выше.
Совет № 3: можно подойти к решению проблемы радикально и вообще отказаться от горячих клавиш. Взамен этого можно использовать нажатия кнопок мыши в любом месте содержимого вкладки, отключив "слушающую" клавиатурную функцию (или просто не используйте хоткей, если не требуется копирование выделенного текста). В общем случае копирование сработает одинаково и по хоткею и по кнопке мыши.
Понятно, что и в этом случае могут быть конфликты, например, с другими аддонами или скриптами самой страницы, но если что – можно пробовать и другие варианты, с зажатием* управляющих клавиш и т.д.… :)
* Естественно, при этом также нужно помнить и о работе функции обработки дополнительных шаблонов, для которой также возможны накладки и конфликты с другими аддонами или скриптами самой страницы.
При использовании скрипта следует помнить о его ограниченных возможностях и общей "заточенности" на решение одной специфичной задачи копирования только в контексте текущей вкладки.
Если же вам требуются расширенные функции копирования ссылок или вы не можете по каким-либо причинам устранить имеющийся у вас конфликт горячих клавиш вызова копировщика, либо если вы работаете в старом браузере и вам не хочется копировать вручную, самым оптимальным вариантом будет использование расширения Copy URL CR.RU.
Как указано выше, в скрипте заложена поддержка старых версий браузеров (от 29+). Кроме указанных различий в настройках, следует помнить о том, что в браузерах версий старше CR42/FF41 функция копирования в буфер НЕ выполняется автоматически. Это связано с принципиальным отсутствием поддержки копирования в таких версиях.
Вместо автокопирования в буфер выдаётся диалоговый запрос для ручного копирования:
После вывода окна следует просто скопировать выделенный в нём текст, нажав CTRL+C или используя правую кнопку мыши (пункт "Копировать…"). Несмотря на внешний вид в форме строки, содержимое выделенного поля полностью соответствует задействованному шаблону и отвечает всем настройкам, сделанным вами.
Такое поведение скрипта является нормальным, иного решения на старых браузерах принципиально нет. Если вы не можете по каким-либо причинам обновить браузер, лучше используйте расширение Copy URL CR.RU.
На всякий случай: этот диалог может выдаваться и на новых версиях браузеров, при определённых условиях, приводящих к "глюкам" срабатывания. Например, автор несколько раз "поймал" это событие при быстром двойном щелчке на ссылке и при отмене перехода сразу же. В общем, копировщик "стопудово" должен отработать даже в самых нестандартных ситуациях… :)