Bookmark Utilities. Букмаркерам посвящается. Букмарклеты

Bookmark Utilities. Букмаркерам посвящается. Букмарклеты

16.05.2019

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

Кто не знает, это такая штука, которую можно добавить в закладки (да, я сегодня дебютирую в роли Капитана Очевидность:) и, при нажатии на нее, произвести какой-нибудь эффект.

Примером может служить герой сегодняшней заметки, который расположен по адресу http://ulizko. com/demo/allthat/ . Инструкция по применению:

  1. Перетащите ссылку «link» на панель закладок или щелкните по ней правой кнопкой мыши и выберите пункт меню «добавить в избранное».
  2. Зайдите на какой-нибудь сайт, вроде http://twitter. com , и нажмите на эту закладку (ну или на избранное).

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

Но. Мы сегодня не об этом, а о том, как делать такие штуки в принципе.

Прежде чем перейти непосредственно к разбору кода, хотелось бы ответить на вопрос (который мне никто не задавал:), а именно, "Какие возможности дает букмарклет?". Правильный ответ - любые. Так как мы получаем возможность подгрузить любой скрипт, мы можем сделать с клиентской страничкой все, что угодно. Например - сделать «выносной» виджет, в котором на любой страничке можно будет добавить запись в блокнот или таскменджер. Или вообще сделать весь таскменеджер выносным. Что тоже важно, они будут работать практически везде - это не плагины к firefox’у и не виджеты к opera. Букмарклетам не важно (ну, почти:), какая у вас ОС или браузер. В общем, есть простор для фантазии.

Итак, как же делать эти самые букмарклеты?
Очень просто: надо создать на страничке элемент anchor с атрибутом href, содержащим javascript-код. Если перевести на русский, то надо сделать вот такую ссылку, адрес которой, по большому счету, и будет букмарклетом:

< a href ="javascript:alert("I am bookmarklet"); void 0;" > Bookmarklet

Для того, чтобы javascript код в адресе ссылки заработал, надо добавит перед ним слово javascript: . Если мне не изменяет мой склероз, это называется «указание псевдопротокола javascript». Еще одна важная деталь - если ваш код вернет какое-то значение, то браузер воспримет его в качестве адреса, по которому нужно перейти, и уйдет с текущей страницы. Чтобы избежать этого, не возвращайте значения, то есть допишите в конец скрипта void 0; , либо оберните весь код в анонимную функцию, невозвращающую значения - (function(){... ваш код мог бы быть здесь...})() .

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

Единственную вещь, которую нам еще нужно знать - это то, что все браузеры ограничивают максимальную длину кода букмарклета. И, подобно тому, как скорость каравана равна скорости самого медленного верблюда, так и максимальный размер кроссбраузерного букмарклета равен ограничению, наложенному IE 6 SP2, то есть, 488 символам.

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

Так поступил и я. Вот код моего букмарклета в человекоадаптированном виде:

(function () {
// создаем новую внутреннюю переменную a (лучше в данном случае использовать короткие идентификаторы)
// и сразу же добавляем свой объект в глобальный объект window, и записываем в него данные, которые уникальны
// для каждого пользователя (ведь они сгенерированы сервером для пользователя перед тем, как он добавил этот букмарклет к себе)
var a = window.allThat = {
userId: "123345456" ,
server: "http://mysite.com/" ,
script: document .createElement("script" ), // создадим и запомним тэг скрипт,
// который сгрузит нам код нашего приложения - мы его потом удалим, если пользователь нажмет кнопку "закрыть"
css: document .createElement("link" ) // аналогично
},
/* динамически создаем и добавляем в DOM элементы: */
h = document .getElementsByTagName("head" );
a.css.rel = "stylesheet" ;
a.css.href = a.server + "css/bookmarklet.2.css" ;
h.appendChild(a.css);
a.script.src = a.server + "js/bookmarklet.7.js" ;
h.appendChild(a.script);
h=null ;
})();

* This source code was highlighted with Source Code Highlighter .

Потом подгружается непосредственно код самого окошка. Думаю, он может представлять некий интерес сам по себе, так что и его я сюда запощу (все комментарии идут на английском, так как заказчик американец):

Если интересно, вот

10.5.4 Объект Bookmark

Объект Word.Bookmark, применение закладок в шаблоне, получение из объектов Bookmark объектов Selection и Range

Объект Bookmark - это просто закладка. На практике это - самый удобный способ навигации по документам, созданных при помощи шаблонов (например, отчетов). Принципиальное отличие его от объектов Selection и Range заключается в том, что все выделения и диапазоны теряются при закрытии документа (объекты Range вообще существуют только во время работы создавшей их процедуры, а закладки сохраняются вместе с документом. Если документ создан на основе шаблона, то все закладки, которые были определены в шаблоне, будут определены и в созданном на основе этого шаблона документе.

Создать закладку (меню Вставка -> Закладка ) намного проще, чем считать количество символов для объекта Range от начала документа/абзаца/предложения, или выполнять операции Move() (MoveDown(), MoveRight(), MoveNext()) для объекта Selection. Кроме того, если вы будете исправлять шаблон (а делать это на практике приходится очень часто), вам, скорее всего, не придется править код для определения объектов Selection и Range.

Функциональность объекта Bookmark невелика. Свойств и методов у этого объекта намного меньше, чем у объектов Selection и Range. Однако обычно никто и пытается использовать объект Bookmark для работы с текстом напрямую. Из объекта Bookmark очень просто получить объект Selection (при помощи метода Select()) или объект Range (при помощи свойства Range()) - и дальше можно пользоваться уже свойствами и методами этих объектов, например:

ThisDocument.Bookmarks("Bookmark1").Select

MsgBox Selection.Text

Создавать объекты Bookmark программным способом необязательно, но если есть необходимость, то можно использовать метод Add() коллекции Bookmark:

ThisDocument.Bookmarks.Add Name:="temp", Range:=Selection.Range

У этого метода - всего лишь два параметра, оба которых используются в примере.

Некоторые важные свойства объекта Bookmark:

  • Empty - если это свойство возвращает True, то это значит, что закладка указывает на точку вставки, а не та текст;
  • Name - имя закладки. Очень удобно, что найти нужную закладку в коллекции закладок можно не только при помощи индекса (номера) закладки, но и по ее имени.
  • Range - возвращает объект Range на месте этой закладки.
  • Start , End , StoryType - аналогично таким же свойствам у объекта Selection.

Методов у объекта Bookmark всего три - Copy(), Delete() и Select(). Copy() - создает закладку на основе существующей, Delete() - удаляет ее, а Select() - выделяет то, на что ссылается закладка.

Описание
Устанавливает или возвращает закладку, которая однозначно определяет текущую запись в Recordset .

Значение
Задаваемое или возвращаемое значение определяются строковым выражением или выражением типа Variant , значением которого является допустимая закладка. Типом данных является массив Variant элементов типа Byte .

Замечания
Для объекта Recordset , созданного исключительно на основе таблиц ядра базы данных Microsoft Jet , свойство Bookmarkable имеет значение True , и допускается использование свойства Bookmark для объектов Recordset . Например, не допускается использование закладок в любом объекте Recordset , созданном на основе присоединенной таблицы Paradox , в которой не определен ключ.
При создании или открытии объекта Recordset каждая из его записей получает уникальную закладку. Для того чтобы запомнить положение текущей записи, следует присвоить текущее значение свойства Bookmark переменной. Для быстрого возвращения к сохраненному в переменной указателю текущей записи в любое время после перехода на другую запись следует указать в значении свойства Bookmark объекта Recordset значение этой переменной.
Число возможных закладок в наборе записей не ограничивается. Для создания закладки, определяющей запись, отличную от текущей записи, следует перейти на нужную запись, а затем присвоить значение свойства Bookmark строковой переменной, которая будет указывать на нужную запись.
Перед использованием свойства Bookmark следует проверить значение свойства Bookmarkable объекта Recordset , которое определяет, поддерживает ли данный набор записей использование закладок. Если свойство Bookmarkable имеет значение False , объект Recordset не поддерживает закладки, и обращение к свойству Bookmark приведет к возникновению перехватываемой ошибки.
Если с помощью метода Clone создана копия объекта Recordset , то значения закладок для исходного объекта Recordset и его копии являются идентичными и допускают взаимную замену. Однако нельзя использовать подобным образом закладки из других объектов Recordset , даже если они были созданы на основе одного объекта или с помощью одинаковой инструкции SQL .
При попытке задать для свойства Bookmark значение, представляющее удаленную запись, возникает перехватываемая ошибка.
Значение свойства Bookmark не идентично номеру записи.

Пример
Следующая программа использует свойства Bookmark и Bookmarkable для запоминания позиции записи в объекте Recordset и возвращения к этой записи.

Все знают, что типы ссылок описывают взаимосвязь между двумя или более страницами на сайте. Определение типа ссылки полезно для SEO, так как позволяет поисковым системам лучше понимать ваш сайт. Так же они могут объяснять причину, почему эта ссылка присутствует на данной странице и дать поисковому роботу гораздо больше информации, чем вы можете подумать.

Краткий перечень типов ссылок

Тип Для чего используется
alternate альтернативный способ отображения страницы
author За ссылкой подробная информация об авторе
bookmark Постоянная ссылка
help Справка или информация помогающая с какой-то частью сайта или контента
license Ссылка на информацию об авторском праве
nofollow Ссылка, которую вы не рекомендуете. Возможно вы ее разместили их корыстных мотивов
prefetch Ресурс, который скорее всего заинтересует пользователя. Сообщает браузеру, что его можно заранее поместить в кэш
search Поиск по сайту
tag Ключевое слово или название категории сайта
next Ссылка на следующую страницу
prev Ссылка на предыдущую страницу

Как определить тип ссылки?

Для определения типа используется атрибут rel

rel=alternate
Тип alternate указывает на то, что по этой ссылкой идет альтернативный вид отображения страницы. Например, это может быть PDF версия, или версия оптимизированная для печати.

PDF версия страницы

Так же у этого типа можно задать hreflang , который указывает на то, что по этой ссылкой идет страница другой языковой версии.

English version

rel=author
Этот тип сообщает, что за ссылкой находиться подробная информация об авторе сайта или страницы.

Постоянная ссылка на страницу автора

rel=help
Ссылка данного типа ведет к контенту справочного характера. Но есть важный момент. Help-ссылка контекстно-зависимая. Браузер сопоставит эту справочную информацию с родительским контейнером, в котором была размещена эта ссылка.

Помощь по комментариям

rel=license
Этот тип может использоваться когда ссылка ведет на лицензионное соглашение основного контента данной страницы. Ссылка данного типа должна быть размещена в пределах тега main сайта. Лицензионное соглашение относится только к тому контенту, которое размещено в пределах этой секции. Оно не будет относится к тому, что например у вас в подвале.

Лицензия

rel=nofollow
Этот тип сообщает, что поисковому роботу не следует воспринимать эту ссылку как ссылку, которую рекомендует публицист

Робот, не переходи на эту страницу

rel=prefetch
Ссылки этого типа следует использовать когда вы ссылаетесь на некие внешние ресурсы, которые пользователь скорее всего откроет. Браузер закеширует заранее эту ссылку и она откроется очень быстро без всяких ожиданий.

Это обязательно нужно прочитать

rel=search
Этот тип сообщает, что ссылка ведет на интерфейс поиска

Открыть поиск на сайте

Эта страница относится к странице поиска

rel=next и rel=prev
Указывает и используется в постраничной навигации. Ссылка на следующую страницу имеет тип next , а на предыдущую – prev

  • 1 страница
  • Текущая страница
  • 3 страница

Объект Bookmark – это просто закладка. На практике это – самый удобный способ навигации по документам, созданных при помощи шаблонов (например, отчетов). Принципиальное отличие его от объектов Selection и Range заключается в том, что все выделения и диапазоны теряются при закрытии документа (объекты Range вообще существуют только во время работы создавшей их процедуры, а закладки сохраняются вместе с документом. Если документ создан на основе шаблона, то все закладки, которые были определены в шаблоне, будут определены и в созданном на основе этого шаблона документе.

Создать закладку (меню Вставка -Закладка ) намного проще, чем считать количество символов для объекта Range от начала документа/абзаца/предложения, или выполнять операции Move() (MoveDown(), MoveRight(), MoveNext()) для объекта Selection.

Функциональность объекта Bookmark невелика. Свойств и методов у этого объекта намного меньше, чем у объектов Selection и Range. Однако обычно никто и пытается использовать объект Bookmark для работы с текстом напрямую. Из объекта Bookmark очень просто получить объект Selection (при помощи метода Select()) или объект Range (при помощи свойства Range()) – и дальше можно пользоваться уже свойствами и методами этих объектов, например:

ThisDocument.Bookmarks("Bookmark1").Select

MsgBox Selection.Text

Создавать объекты Bookmark программным способом необязательно, но если есть необходимость, то можно использовать метод Add() коллекции Bookmark:

ThisDocument.Bookmarks.Add Name:="temp", Range:= Selection.Range

У этого метода – всего лишь два параметра, оба которых используются в примере.

Некоторые важные свойства объекта Bookmark

Empty – если это свойство возвращает True, то это значит, что закладка указывает на точку вставки, а не та текст;

Name – имя закладки. Очень удобно, что найти нужную закладку в коллекции закладок можно не только при помощи индекса (номера) закладки, но и по ее имени.

Range – возвращает объект Range на месте этой закладки.

Start, End, StoryType – аналогично таким же свойствам у объекта Selection.

Методов у объекта Bookmark всего три – Copy(), Delete() и Select(). Copy() – создает закладку на основе существующей, Delete() – удаляет ее, а Select() – выделяет то, на что ссылается закладка.

Объект Word.Range, программная работа с диапазоном в документе, свойства и методы объекта Range, преимущества по сравнению с объектом Selection

Как уже говорилось выше, чаще всего разработчиками для определения места ввода текста и навигации по документу используется объект Selection. Для этих же целей можно использовать и объект Range. Главное отличие между объектами Range и Selection заключается в том, что объект Selection может определить и пользователь (выделив текст мышью), а объект Range можно определить только программно, и он не зависит от текущего положения указателя или действий пользователя.

Формальное определение объекта Range выглядит так: это программный объект, который представляет непрерывный участок текста в документе. Этот объект не зависит от объекта Selection – вы можете работать с объектом Range, не изменяя текущего выделения. Он может не включать в себя ни одного символа (представлять курсор ввода текста).

Объектов Range в каждый момент времени может быть сколько угодно, а объектов Selection – только один.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows