Готовый перевод Мои букмарклеты / 📔: Букмарклеты

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

Многие браузеры обрабатывают в адресной строке и ссылках не только адреса http:, но и javascript:, что позволяет запустить на странице дополнительный код. Ещё браузеры могут позволять подобные закладки, которые прозвали bookmarklets. Если эти закладки ещё легкодоступны (как в моём браузере Lightning), то ими достаточно удобно заменить некоторые кнопки или расширить возможности сайта. Хорошим тоном считается оформить код ещё в виде ссылки, которую проще скопировать, или добавить в закладки, но этот сайт не позволяет такое, и поэтому он просто в отдельных блоках, откуда надо скопировать все и вставить в закладку. Но в этом есть и хорошая сторона - лучше увидеть код, чтобы не запустить что-то не то, т.к. подсунуть могут почти что угодно. Ниже пока положу код от пары букмарклетов и попробую объяснить.

selected in eedittext

javascript:(function(){var el = getSelectionParentElement(); if(getSelectedText()!="" && $(el).closest('.content-text').length){read_chap_id = $(el).closest('.chapter').data('chap-id'); $('#etext').val(getSelectedText()); $('#etype').val(6); $('#eedittext').val(getSelectedText()); $('#popup').modal('show'); document.getSelection().removeAllRanges();}})()

empty eedittext

javascript:(function(){var el = getSelectionParentElement(); if(getSelectedText()!="" && $(el).closest('.content-text').length){read_chap_id = $(el).closest('.chapter').data('chap-id'); $('#etext').val(getSelectedText()); $('#etype').val(6); $('#eedittext').val(''); $('#popup').modal('show'); document.getSelection().removeAllRanges();}})()

Я активно использую эти два букмарклета где-то с осени 2020. Достаточно так же выделить текст и вызывать букмарклет, который проделает работу аналогичную нажатию на кнопку "ошибка", которая на мобильных браузерах не появляется от выделения. Но для них важно чтобы их можно было активировать не теряя выделение, т.к. большая часть информации берётся через него. Не каждый браузер это позволяет. Кроме Lightning и его форка, в которых закладки легко доступны, я пробовал ещё браузеры на основе Firefox Mobile. У них закладки не так доступны, а только через адресную строку. При этом выделение сбрасывается и эти букмарклеты не сработают. Т.к. я планировал сменить браузер на основанный на Firefox Mobile, то собирался и для него сделать подобные, но так и не перешёл. Теоретически эти букмарклеты можно переписать (почти заново написать) так, чтобы использовался буфер обмена, и отталкиваясь от того, что в него скопировали, можно получить оставшуюся информацию. Или из буфера отправить как есть, но может сломаться определение id главы при автоподгрузке. Другую зацепку я заметил сейчас, но это уже не закладки - попробовать вклиниться в варианты поиска браузера.

Как работают эти 2? Они почти одинаковы. javascript: обозначает схему javascript, так что браузер выполняет остальную часть как код языка программирования javascript, почти единственный, который понимают браузеры. Оставшаяся часть представляет собой "однострочник" - весь код уложен в одну строку, иначе бы он не влез в закладку. Javascript это позволяет. Код этот взят их кода читалки, делает то же самое, что и код нажатия кнопки "ошибка", немного другим образом. Я уже точно не помню тонкости javascript, но тогда я обернул всё в скобки. В конце пустые скобки чтобы точно ничего не вышло оттуда. function - это функция, очевидно, и анонимная, вроде, так что тоже лишних следов не будет. фигурные скобки образуют подблоки кода, а точка с запятой разделитель команд. В первом блоке задаётся переменная el, которая приравнивается к результату функции getSelectionParentElement, которая присутствует в коде читалки и определяет где находится выделение. Дальше идет условие, что если выделение не пустое и находится в блоке content-text, т.е. среди текста главы, а не где-то вне его, то выполняется следующий подблок. Тут переопределяется id читаемой главы по выделению, что важно при автоподгрузке главы. Дальше выделенный текст заносится в то что потом будет видно как поле "Фрагмент", устанавливается тип ошибка (6 - опечатка). Дальше отличие, что в первом коде в поле "Исправление" так же заносится выделенный текст, а во втором пустой. И последним исполняется переключение на окно "Ошибка в тексте". Выполнение заканчивается, дальнейшее поведение определяется кодом читалки. По идее, id главы задаётся в коде читалки, так что без автоподгрузки глав можно не переопределять, и если не нужно захватить текст, то можно просто выполнить $('#popup').modal('show') без всего этого.

Внимание! Этот перевод, возможно, ещё не готов.

Его статус: идёт перевод

http://tl.rulate.ru/book/53130/1342213

Обсуждение главы:

Всего комментариев: 1
#
Форма отправки поменялась.
Развернуть
Чтобы оставлять комментарии Войдите или Зарегистрируйтесь