LXF84:Hardcore Linux
|
|
|
- Hardcore Linux: Проверь себя на крутых проектах для умников
Greasemonkey: Обновим Сеть!
- Не чесались ли у вас руки улучшить даже самые отличные web-сайты? Greasemonkey научит сайты работать так, как хочется Нику Вейчу, а то и вам.
Задача этого месяца ерундовая: всего-навсего создать собственный web-браузер, способный заново интерпретировать обветшавшие сайты и заставить их слушаться наших команд.
Думаете, пахать придется серьезно? Ну, мы ж не слабаки! Да и не забывайте: фишка нашей серии в том, что черная работа не для нас, главное, чтоб она была сделана. Так что мы и тут извернемся, как истые хакеры.
Firefox – хороший браузер, более чем хороший. Его нужно лишь чуть-чуть «обработать напильником», например, создать специальное расширение, позволяющее при помощи заготовленного сценария корректировать взятый HTML... Но нам не придется делать даже этого, поскольку – спасибо Аарону Брудману [Aaron Broodman] – на свете есть Greasemonkey! Итак, первый этап нашего хитрого плана завершен: мы превратили задачу по написанию миллионов строк кода в задачу состряпать небольшой сценарий JavaScript. Ура!
Хорошо, но прежде чем приступать к созданию сценария, нужно добыть Firefox и Greasemonkey (и то и другое находится на прилагаемом диске, но проще скачать их прямо из Сети, с сайта http://greasemonkey.mozdev.org). Кстати, в дальнейшем вам не повредит некоторое знакомство с JavaScript, так что взгляните на врезку.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Web-приложение, которое я собираюсь улучшать – менеджер фотографий Flickr, а вы можете выбрать любой другой сайт на ваш вкус. Хотя было бы неплохо, если бы этот сайт хорошо поддерживался и имел четкую, понятную иерархическую структуру страниц – например, попытайте счастья с новостным сайтом BBC, с Amazon или с Play. Я выбрал Flickr потому, что здесь есть простор для добавления новых функций, а также потому, что визит на этот сайт – повод оставить парочку глумливых комментариев к чужим фото.
Flickr позволяет пользователям помечать свои фотографии, то есть назначать для них ключевые слова-тэги, по которым затем можно выполнять поиск. Но со страницы каждой конкретной фотографии можно искать только по одному ключевому слову за раз. Если вы крупным планом (макро) засняли цветок наперстянки и выбрали ключевые слова «природа макро наперстянка» (“nature macro foxglove”), то найти похожие кадры, щелкая на метки по отдельности, будет сложновато. Я решил добавить возможность искать по всем имеющимся ключевым словам одновременно. Это хороший тестовый пример, поскольку нам потребуется считывать данные со страницы и записывать их обратно. Начнем с чтения.
Фокус с Flickr
Требуется найти на странице Flickr, где помещено наше фото и информацию о ключевых словах. У JavaScript хватает методов обработки DOM (внутренней иерархии HTML-документа), и все, что нужно сделать – это посмотреть, где в дереве документа находится нужная информация и как однозначно отличить ее от прочего. Проще всего использовать для этих целей встроенный в Firefox браузер DOM. Откройте его в Tools – меню инструментов Firefox – и пощелкайте по нему, чтобы увидеть дерево иерархии. Firefox любезно покажет мигающую красную рамочку вокруг того элемента, который вы выбрали в DOM Inspector.
Похоже, что нам повезло. Список ключевых слов на странице фотографии хранятся в элементе <div> и помечен как thetags. Это уникальный идентификатор. Таким образом, мы можем просто перетряхнуть все элементы <div> в документе, пока не найдем нужный. Вот кусочек JavaScript-кода, который это делает:
var divs, tagsdiv divs = document.getElementsByTagName(‘div’); //Мы сохранили все элементы div как объекты //в массиве под названием ‘divs’ for (var i=0; i<divs.length; i++) { if(divs[i].id == ‘thetags’){ tagsdiv=divs[i]; } }
Здесь использован метод, позволяющий создать массив всех эле- ментов <div>, а затем искать в нем тот, что нам требуется (thetags). Это не самый эффективный способ, но он годится в качестве примера, и его проще модифицировать для ситуаций, когда требуется найти более одного отмеченного элемента [в противном случае можно было бы использовать код var tagsdiv=document.getElementById(‘thetags’), – прим.ред.]. Более быстрый метод мы покажем в следующей части.
<div> вообще-то содержит много всего – заголовок, ссылки на иконки, плюс еще по одному <div> на каждый отдельный тэг. И снова мы можем, перебором в цикле, построить список тэгов. Извлечение собственно текста метки достигается выборкой HTML-элемента из нужного узла (какого именно – видно по DOM-структуре). А потом соберем полученные метки в список, который станет основой запроса, который мы передадим обратно на страницу в следующей фазе. Сосредоточьтесь, привожу этот кусок кода:
if (tagsdiv) { tagsdiv = tagsdiv.getElementsByTagName(‘div’); tagslist =’’; for (var i = 0; i< tagsdiv.length; i++){ if (i>0) { tagslist = tagslist + ‘+’; } tagslist = tagslist + tagsdiv[i].childNodes[3].innerHTML; } }
Метод childNodes любого из узлов дерева содержит список всех дочерних узлов, к которым мы можем обращаться по номерам, чтобы найти нужный и запросить для него значение innerHTML, в котором содержится HTML-представление этого узла. Оно полезно для прояснения непонятных моментов, но проследите за тем, чтобы запросить его для нужного узла, иначе получите описания совершенно посторонних тэгов.
Вернем долги
Итак, мы сумели достать нужную информацию из документа. Ура! Настало время поиграть с полученным результатом и записать немножко HTML-текста обратно на страницу. Разработчики JavaScript, видимо, предвидели такую необходимость, и припасли множество встроенных функций. Первый вопрос, который нужно решить – это в какое место страницы поместить наш текст. Подходящим местом выглядит список с информацией о снимке в правой части страницы, ниже списка ключевых слов. Вернувшись в DOM-браузер, мы увидим, что это первый на странице элемент ul. Так что мы просто создаем новый элемент списка и вставляем его в нужное место:
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
var searchtagLi = document.createElement(“li”); searchtagLi.setAttribute(“class”,”Stats”); searchtagText = ‘Search <a href=”http://www.flickr.com/search/ ?w=all&q=’+tagslist+’”style=”text-decoration: none;”>similar tags</a> on Flickr’; searchtagLi.innerHTML = searchtagText; insertpoint = document.getElementsByTagName(“ul”)[0]; insertpoint.appendChild(searchtagLi);
Метод setAttribute используется для указания, какого класса должен быть наш новый элемент, чтобы по CSS-стилю не отличаться от своих соседей.
Текст, который мы добавили – всего лишь ссылка на функцию продвинутого поиска Flickr, которой мы, вместо одного ключевого слова, передаем собранный нами список. Легко видеть, что потом использован метод innerHTML для записи данных в объект. Объект insertpoint указывает на ранее найденный элемент ul, так что остается только вызвать метод appendChild для добавления его в дерево (причем в самый конец списка, что очень правильно).
Вот и все, и этого достаточно. Чтобы загрузить скрипт Greasemonkey, просто активируйте это расширение и укажите браузеру на файл (назвав его как-нибудь вроде something.user.js) – Greasemonkey обнаружит файл и позволит вам его загрузить. LXF