Господа!
Подскажите, пожалуйста, существуют ли расширения, позволяющие делать закладки, сохраняющие позицию полосы прокрутки? Без помощи якорей.
Потребность в таком расширении возникла при чтении книг - очень не хватает возможности создавать закладки в определенной позиции читаемого файла.
Отсутствует
Somniator
Было расширение Pagemark - ищи на addons.mozlla.org, но я не знаю, работает ли оно после перезагрузки браузера.
«I actually hate programming, but I love solving problems» © Rasmus Lerdorf, PHP's Creator
Отсутствует
Частично задача решается расширением eReader (см. http://forum.mozilla.ru/viewtopic.php?id=7296 и http://forum.mozilla.ru/doku.php?id=gen … bookreader). Однако это расширение позволяет сохранить только одну позицию в файле.
stoneflash
Pagemark также позволяет сохранить только одну позицию, при перезапуске браузера позиция не сохраняется. Да и логика работы расширения не совсем понятна.
В целом вопрос остается открытым.
Отсутствует
Задача решается следующим образом.
1. Подготовка страницы.
Открывается страница большого размера (например, книга). Запускается закладурка со следующим кодом:
javascript:( function() { function modifyElement(node) { node.style.setProperty('background', 'none', ''); var color = getRGBColor(node, 'background-color'); if (typeof(color) != 'string' && color[0] + color[1] + color[2] >= 2.8) node.style.setProperty('background-color', backgroundColor, ''); var tagName = node.tagName.toLowerCase(); if (isBlock(tagName) && (containText(node) || containInlineElement(node))) { var block = document.createElement('div'); block.style.setProperty('max-width', '35em', ''); var cur_align = getComputedStyle(node, null).getPropertyValue('text-align'); if (cur_align == 'justify') block.style.setProperty('text-align', 'left', ''); block.style.setProperty('margin', 'auto', ''); block.style.setProperty('line-height', '150%', ''); var color = getRGBColor(node, 'color'); if (typeof(color) != 'string' && color[0] + color[1] + color[2] <= 0.3) { block.style.setProperty('color', foregroundColor, ''); } while (node.childNodes.length > 0) { var child = node.childNodes[0]; block.appendChild(child.cloneNode(true)); node.removeChild(child); } node.appendChild(block); } } function isWhitespace(s) { for(var i = 0; i < s.length; ++i) { if (s.charCodeAt(i) > 32) return false; } return true; } var textNodeNumber = 0; function getNextTextNodeNumber() { return textNodeNumber++; } function modifyNode(n) { if (n.nodeType == Node.ELEMENT_NODE) { for(var i = 0; i < n.childNodes.length; ++i) { var x = n.childNodes[i]; modifyNode(x); } } else if (n.nodeType == Node.TEXT_NODE) { var s = n.nodeValue; if (isWhitespace(s) == false) { var a = document.createElement('a'); name = getNextTextNodeNumber().toString(); a.setAttribute('href', '#n' + name); a.setAttribute('name', 'n' + name); a.setAttribute('style', 'text-decoration: none; color: inherit !important;'); var t = n.cloneNode(n); a.appendChild(t); n.parentNode.replaceChild(a, n); } } } modifyNode(document.body); } )()
Обработанная этой закладуркой страница сохраняется в Scrapbook'е.
2. Создание закладок и переход по ним.
Открывается сохраненная в Scrapbook'е страница. Щелкается фрагмент текста (каждый фрагмент текста представляет собой ссылку, при щелчке изменится адрес в строке адреса). Создается закладка штатными средствами.
Для перехода к нужному фрагменту текста осуществляется переход по созданной закладке.
Итого: всё просто - подготавливаем файл и сохраняем в scrapbook'е, затем пользуемся обычными закладками.
P.S. Код закладурки далек от совершенства (например, теряются адреса всех ссылок на странице). Если эта идея мне понравится - доработаю.
Отредактировано Somniator (05-07-2006 15:32:26)
Отсутствует
Somniator , как-то много требований. Scrapbook?
Рискну предложить такой вариант:
1. Ставится обычная закладка;
2. Затем выполняется букмарклет, который в кукис записывает состояние скроллбаров.
Это "запись". Соответственно "восстановление" будет
1. Вызов обычной закладки;
2. Вызов букмарклета, который восстанавливает положение скроллбаров из кукиса.
В принципе, можно ставить таким образом (вызовом 2) неограниченное количество закладок на странице. Вижу (пока) только одно дополнительное телодвижение - букмарклет должен "прихватывать" в кукис размеры окна, и восстанавливать его, соответственно. А это может быть отключено у пользователя в политиках javascript.
Отсутствует