Статьи

Преврати любой веб-сайт в форму с помощью Greasemonkey

Greasemonkey — это расширение Firefox от Aaron Boodman , которое позволяет вам запускать персональные сценарии DHTML (известные как «пользовательские сценарии») на любом веб-сайте. Пользовательские скрипты — это, по сути, букмарклеты, которые запускаются автоматически, но поскольку они это делают, они намного полезнее.

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

В этой статье рассматриваются пользовательские сценарии в целом и Greasemonkey в частности, чтобы изучить некоторые возможные приложения и обсудить любые возникающие проблемы.
Мы перейдем от простых к все более сложным примерам, и я предполагаю, что вы уже знакомы с JavaScript и DOM; но все, кроме одного, являются рабочими пользовательскими скриптами, так что вы можете установить и использовать их независимо от ваших навыков JavaScript Вам, конечно, понадобится Firefox и расширение Greasemonkey; если у вас их еще нет, вы можете скачать их по следующим ссылкам:

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

Прежде чем мы начнем, я хочу сделать краткий обзор того, как устанавливать и писать пользовательские скрипты для Greasemonkey; если вы уже знакомы с расширением, вы можете сразу перейти к разделу «Использование его».

Установка пользовательских скриптов

Пользовательские сценарии Greasemonkey — это файлы .js с условным обозначением «scriptname.user.js». Вы можете установить скрипты несколькими способами:

  • Щелкните правой кнопкой мыши ссылку и выберите «Установить скрипт пользователя…» в контекстном меню.
  • Просмотрите скрипт в Firefox и выберите «Установить скрипт пользователя…» в меню «Инструменты».

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

Написание пользовательских скриптов

Пользовательские сценарии Greasemonkey запускаются в документе, как только DOM готов, но до события onload. У них нет специальных правил, но рекомендуется заключать их в анонимные функции, чтобы они не мешали другим сценариям:

(function()  {  ... scripting ...   })(); 

Кроме того, у меня есть одно предложение для написания пользовательских сценариев: везде, где это возможно, использовать только хорошо поддерживаемые методы сценариев DOM.

В частности, я стараюсь избегать технологий, таких как XPath, которые не очень широко поддерживаются, и, кроме того, нестандартных свойств, таких как document.body и innerHTML , которые могут не существовать в режиме XHTML (на страницах, используемых как application / xhtml + xml или эквивалентных ).

Эти рекомендации могут показаться бессмысленными, поскольку мы пишем только для Firefox, но таким образом мы повысим шансы на более широкую совместимость (Firefox — не единственный браузер, в котором доступны пользовательские сценарии; об этом мы поговорим позже) ,

Комментарии к метаданным

Greasemonkey имеет простой синтаксис комментариев, который используется для определения сайтов, на которых скрипт должен или не должен запускаться, имени скрипта, его описания и пространства имен (пространства имен URI, как в XML, в котором имя скрипта должно быть уникальный). Вот резюме:

 // ==UserScript==  // @name            Script name  // @namespace       http://www.sitepoint.com/userscripts/  // @description     Brief description of script  // @include         http://google.com/*  // @exclude         http://msn.com/*  // ==/UserScript== 

Синтаксис довольно понятен, но руководство по написанию Greasemonkey более подробно.

Положить его на использование

Разработка Greasemonkey была в значительной степени вдохновлена специфическим для сайта расширением Адриана Головатого для All Music Guide , которое разработано, чтобы исправить то, что многие считают серьезными проблемами с новым дизайном сайта. Цель разработчика состояла в том, чтобы сделать так же легко написать специфичное для сайта расширение, как и написать DHTML. И так у него есть.

Исправление MSDN Саймона Уиллисона с помощью Greasemonkey было одним из первых, кто широко использовал Greasemonkey, представив скрипт, который раскрывает информацию, которая в противном случае была бы видна только IE, в то время как « Добавление постоянных поисков в Gmail» Михаила Парпариты, безусловно, является самым изощренным примером. видел на сегодняшний день.

Но мы собираемся углубиться в несколько простых улучшений сайта, чтобы представить возможности, а также практические возможности пользовательских сценариев. Я сделал пустой шаблон для скриптов Greasemonkey, который вы можете найти полезным; это также включает некоторые удобные методы.

Настройка сайтов, которые вы посещаете часто

Автозаполнение форм

Наш первый пример автоматически заполняет один элемент формы на определенной странице. В этом случае страница является домашней страницей форума SitePoint, а значением является мое имя пользователя:

Просмотрите или установите скрипт auto-complete.user.js из архива кода.

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

Давайте расширим этот принцип, добавив еще один сайт: Yahoo! страница входа в почту. Сначала мы добавим путь @include в начало раздела комментариев:

 // @include         http://mail.yahoo.com/ 

Затем мы добавляем соответствующий сценарий; в этом случае поле входа в систему не имеет идентификатора, поэтому мы должны найти его через document.forms :

 //look for the yahoo mail login form  var yahoo = typeof document.forms['login_form'] != 'undefined'  ? document.forms['login_form']['login'] : null;  if(yahoo != null)  {  //write your username to the field  yahoo.value = 'brothercake';  } 

Вы можете добавлять другие сайты по своему усмотрению, определяя для каждого домена @include и кусок кода, чтобы найти и заполнить его поле формы (очевидно, изменив имя пользователя на ваше!).

Изменить макет

Пользовательский скрипт может сделать гораздо больше, чем написать отдельный элемент: он может переписать весь DOM любой страницы, заставляя его выглядеть и вести себя именно так, как вы хотите. В следующем примере я собираюсь изменить титульную страницу Slashdot по умолчанию. Я уберу рекламную рамку сверху и заменю ее дубликатом формы поиска по сайту, которая в противном случае отображается только внизу:

Просмотрите или установите скрипт slashdot-restructure.user.js из архива кода.

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

Это очевидный момент, но, тем не менее, он важен: все, что мы пишем с предположениями о DOM, однажды перестанет работать, и мы ничего не можем с этим поделать.

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

 //the first center element contains an ad frame  var adframe = document.getElementsByTagName('center')[0];   //remove it  if(adframe != null) { adframe.parentNode.removeChild(adframe); } 

Теперь, если скрипт потерпит неудачу, по крайней мере, он не выдаст никаких ошибок.

Настроить результаты поиска

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

Просмотрите или установите скрипт google-tree.user.js из архива кода.

Единственное серьезное осложнение, с которым мы столкнемся при разборе HTML, заключается в том, что формат изменяется, если в результате содержится ссылка для перевода (в ней есть дополнительная <table> ). Но, если мы это учтем, мы сможем надежно идентифицировать сводку каждого результата, для чего мы затем добавим поведение «показать / скрыть», которое запускается из динамически созданного значка.

Поведение происходит от обработчика на значке, который работает как с мышью, так и с клавиатурой. Использование javascript: void (null) в ссылке href просто предоставляет значение href; в противном случае ссылка не была бы ориентированной на клавиатуру (потому что Mozilla не может установить фокус на ссылку, которая не имеет ссылки). По сути, это тот же трюк, что и при использовании href="#" , но этот метод более чистый: он больше ничего не делает, поэтому вам не нужно контролировать его возвращаемое значение таким же образом.

Улучшение юзабилити в Интернете

Все примеры, которые мы рассмотрели, предназначены для конкретных веб-сайтов. Но пользовательские сценарии могут быть созданы для запуска на каждом веб-сайте, и, возможно, именно здесь идея становится замечательной: вы можете написать пользовательские сценарии, чтобы изменить поведение всего Интернета. По сути, вы можете настроить свой браузер, просто написав несколько простых JS.

Практические соображения здесь немного отличаются, потому что, вообще говоря, мы не будем искать конкретные структуры: мы будем создавать что-то новое или модифицировать широко используемые атрибуты. Таким образом, сценарии в этом примере, как правило, более совместимы с предыдущими примерами.

Изменить цели ссылки

Очевидное приложение, этот сценарий идентифицирует ссылки, имеющие целевой атрибут "_blank" , и перенаправляет их на "_self" :

Просмотрите или установите скрипт target-changer.user.js из архива кода.

Этот сценарий использует обработчик одного документа для изменения цели на лету, а не перебирает все ссылки и изменяет их заранее. Мы делаем это отчасти потому, что он более эффективен, но в основном так, чтобы скрипт продолжал работать, если цель была установлена ​​другими сценариями (помните, что пользовательские сценарии Greasemonkey запускаются до события window.onload ).

С более сложным сценарием вы можете пойти гораздо дальше: изменить или удалить события onclick, переписать javascript: URI, даже полностью переопределить метод open() . Но с такими агрессивными мерами возникает риск блокирования нужной вам функциональности: если метод open() переопределен, некоторые ссылки могут в конечном итоге ничего не делать. Это то, что вы, вероятно, хотели бы делать только для определенных сайтов, а не для Интернета в целом.

Убрать рекламу

Проблема с удалением рекламы заключается в том, что не все из них являются нежелательными. Некоторым людям вообще не нравится реклама, в то время как для многих приемлемы простые текстовые объявления, и только большие или анимированные графические объявления считаются навязчивыми. Источник рекламы также может быть релевантным: возможно, определенные компании или сайты с большей вероятностью будут размещать рекламу, которая вас интересует, или склонны доверять.

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

В этом примере я разделил сценарии на методы, основанные на типе рекламы — будь то изображение, фрейм или флеш-реклама; каждый объект дополнительно проверяется на предмет наличия известного рекламного сервера:

Просмотрите или установите скрипт remove-ads.user.js из архива кода.

Если вы не хотите удалять объект определенного типа, просто закомментируйте вызов его метода в нижней части скрипта:

 //instantiate and run  var rem = new removers();  rem.banners();  rem.iframes();  rem.flash(); 

Если вы хотите расширить список рекламных серверов, вы можете добавить столько, сколько захотите, в массив доменов в верхней части конструктора объектов:

 //list the domains or subdomains from which ads might be coming  this.domains = ['doubleclick.net','servedby.advertising.com']; 

И, если вы предпочитаете разрешить некоторым сайтам показывать свою рекламу, какой бы она ни была, вы можете добавить эти сайты в @exclude комментариев @exclude :

 // @exclude         http://www.sitepoint.com/* 

Этот принцип может быть принят гораздо дальше, чтобы контролировать в n-й степени, удаляется ли элемент или нет — вы можете различать по размеру, например, изображения размером 468 x 60 пикселей. Или вы можете разрешить Flash, только если он встроен с использованием <object> , а не если он использует <embed> . Это отфильтровывает большую часть рекламы, оставляя совместимые сайты в покое!

Правильный язык и орфография

Корнелл Кимбалл (Cornell Kimball) изучил слова с ошибками и проанализировал группы новостей в Интернете (Usenet), чтобы обнаружить наиболее распространенные ошибки. Используя некоторые из этих данных для создания регулярных выражений, этот скрипт выполняет замены текста для исправления распространенных ошибок:

Просмотрите или установите скрипт language-corrector.user.js из архива кода.

Вы можете расширить эту идею, добавив в список фильтры ненормативной лексики: преобразовать недопустимый язык в «***» или любую пустую строку. Но будьте осторожны с любыми словами, которые также могут быть подстроками других слов, таких как «хам» — «ситцевый». (В британском городе Сканторпе есть история о местном органе власти, который целый день обходился без электронной почты из-за серьезного упущения в их правилах фильтрации почты!) Возможно, вам придется проверить слово, плюс начальный и конечный пробел или пунктуация, чтобы убедиться, что у вас нет таких проблем.

Более сложный пример может сканировать отдельные страницы на предмет сложной терминологии или технических фраз, которые не объяснены должным образом на сайте, добавляя <abbr> или <dfn> где это необходимо. Вы даже можете создавать ссылки непосредственно на онлайн-словарь или другой источник справочной информации.

Google Site-search

Сайт, который не имеет возможности поиска, может разочаровывать в использовании, но Google позволяет вам искать на отдельных сайтах, просто добавив site: domain.com к запросу. Этот сценарий использует этот синтаксис для создания окна поиска, специфичного для сайта, на каждой странице.

Или, по крайней мере … это был план:

Просмотрите или установите скрипт site-search.user.js из архива кода.

Сценарии основательны, идея звучит, но у нее довольно серьезная проблема: она не работает.

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

Как вы увидите, если вы попробуете это, основной сценарий работает, но вы не можете набрать текстовое поле, даже если вы можете скопировать и вставить в него, а затем нажмите Enter для подтверждения. Дальнейшие исследования показывают, что свойство "-moz-user-modify" имеет значение "read-only" (хотя явная установка значения "read-write" не помогает).

Теперь я действительно думал о двух уродливых хакерах, чтобы обойти это, и они оба работают, но я очень неохотно их использую, потому что я думаю, что они бросают вызов ограничению безопасности. Сценарий создает элемент пользовательского интерфейса, и, возможно, расширения Firefox не могут инициировать пользовательский ввод в DOM просматриваемой страницы. Я делаю догадки здесь, потому что я не смог найти факты, но если это, или что-то подобное, имеет место, я подозреваю, что это также будет верно для любых пользовательских сценариев на основе форм, делая такие вещи в основном несостоятельно.
Если кто-то может пролить свет на это, я весь слух!

Onfocus Подсказки

Меня часто расстраивает тот факт, что всплывающие подсказки атрибутов заголовка не отображаются при навигации по клавиатуре — они работают только при использовании мыши. Этот скрипт компенсирует это, создавая всплывающие подсказки, которые запускаются событиями фокуса:

Просмотрите или установите скрипт onfocus-tooltips.user.js из архива кода.

Сценарии довольно просты; он создает один элемент и записывает текст заголовка (если таковой существует). Сложности заключаются в расположении всплывающей подсказки: она должна позиционироваться относительно спускового элемента, а затем компенсировать ее возможное расположение за окном или ниже сгиба.
Он работает со ссылками, iframes, объектами и элементами формы — теми, которые могут получить фокус — и создает всплывающие подсказки, стилизованные с использованием системных цветов CSS2 .

Панель заголовков навигации

Большинство последовательных браузеров (программы чтения с экрана, такие как JAWS, и текстовые браузеры, такие как Lynx) имеют «режим заголовков» или что-то подобное, где они перечисляют и ссылаются на все заголовки на странице. Это обеспечивает большую степень произвольного доступа (на страницах, которые используют правильные заголовки).

Этот скрипт эмулирует эту функциональность, создавая маленькую иконку «H» в правом верхнем углу страницы, откуда выпадающее меню, содержащее ссылки на каждый заголовок:

Просмотрите или установите скрипт headings-navigation.user.js из архива кода.

Меню построено в виде списка, каждый элемент которого представляет собой ссылку, заполненную текстом или другим HTML-кодом из исходного заголовка. Если заголовок содержит изображение, оно будет воспроизведено вместе с остальными. Однако, поскольку это может не быть идеальным, альтернативным подходом может быть извлечение и использование текста ALT или, возможно, удаление посторонней разметки в целом.

Persist Alternate Stylesheets

Последний пример в этом разделе начинается со сценария с хорошим смыслом, но по пути открывает банку с червями …

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

В этом примере выполняется поиск таблиц стилей, включенных через элементы <link> , и сохраняется их отключенное состояние в файле cookie при каждом его изменении; Затем сценарий повторно применяет последнее состояние к последующим просмотрам страниц. Это эффективно добавляет специфичное для домена постоянство к сайтам, которые используют собственные переключения таблиц стилей:

Просмотрите или установите скрипт persist-stylesheets.user.js из архива кода.

Это работает, потому что Firefox обновляет свойство disabled таблиц стилей с изменениями из собственного механизма переключения, поэтому мы можем реализовать постоянство, просто непрерывно получая и сохраняя эти данные в cookie.

Это подводит нас к первому важному моменту и кроется в нашей банке с червями: используемый нами файл cookie находится в домене, который мы не контролируем. С практической точки зрения это означает, что, если сайт уже использует куки, мы рискуем заполнить ограничение данных (4 КБ) и, таким образом, переопределить данные, которые нужны сайту. Мы не можем избежать этой возможности (если не использовать куки вообще), но мы можем уменьшить риск, сохраняя данные как можно меньше. Вы также можете уменьшить влияние, имея список определенных доменов @include , где вы знаете, что эта функция необходима, вместо того, чтобы запускать ее на каждом сайте, который использует альтернативные таблицы стилей.

Но тут неожиданно возникают и проблемы с безопасностью: было бы очень легко написать пользовательский скрипт, который крадет cookie и другие данные с каждого сайта, с которым он сталкивается, а затем отправляет все это куда-то еще. Пользователи могут подвергать себя совершенно новому ракурсу эксплуатации; недавняя статья cnet уже выдвинула эту проблему на первый план. Он также задает более общие вопросы о том, могут ли владельцы сайтов возражать против изменения своих страниц таким образом.

Дин Эдвардс поднимает подобный вопрос с его интересным взглядом на то, как Greasemonkey сломал его сайт ; следует оживленная дискуссия. Это, конечно, кажется прискорбным, если с большим количеством людей, использующих Greasemonkey, мы больше не можем предсказать DOM наших Веб-сайтов; но вопрос действительно спорный, потому что это уже так. Любой может заставить любую страницу отображаться любым способом в своих браузерах; многие надстройки браузера, программы чтения с экрана и другие пользовательские агенты изменяют, переписывают или добавляют в DOM страницы перед выполнением любого сценария на стороне клиента.

Возможности, которые дает нам Greasemonkey, ничем не отличаются, за исключением большого числа людей, которые могут его использовать, и я полагаю, что это действительно проблема, особенно когда речь идет о таких вещах, как влияние на доходы от рекламы. Как и TiVo (система цифрового телевидения, которая может отфильтровывать рекламные паузы из записей), это становится угрозой только в том случае, если ее используют многие «обычные» люди.

Но проблемы безопасности очень серьезны, и блог Greasemonkey решает их, предлагая браузерам не иметь возможности отправлять http-запросы за пределы текущего домена без запроса пользователя. Это, безусловно, может уменьшить проблему кражи данных, хотя и не без нежелательных побочных эффектов (как насчет влияния на законную удаленную синдикацию?). И это не устраняет проблему полностью, поскольку автор продолжает признавать: ничто не мешало бы пользовательскому сценарию переписывать ссылки на страницы через другой сервер, добавляя данные строки запроса по пути.

Я думаю, что смысл в следующем: нетехнические пользователи должны иметь возможность доверять источнику пользовательского сценария, который они устанавливают. Одно из возможных решений могло бы возникнуть, если бы из проверяющего источника был сделан доступ к архиву пользовательских скриптов, как это делают расширения Firefox. Это не помешает разработчикам предлагать сценарии напрямую, или пользователям загружать их, но даст нетехническим пользователям место, где они могут быть уверены, что все, что они устанавливают, безопасно. И на самом деле, постоянно активная команда разработчиков GM ищет способы сделать это, на веб-сайте userscript.org запланировано управление каталогом доступных скриптов.

Инструменты разработчика

Пользовательские сценарии могут также представлять собой нишу для создания инструментов разработчика — сценариев, которые можно написать и настроить для конкретных проектов, или оставить в виде набора общих инструментов, которые включены или отключены по мере необходимости.
Снова приходит на ум очевидное сравнение с букмарклетами, а также тот факт, что пользовательские скрипты запускаются автоматически, поэтому мы можем делать то, что было бы невозможно с помощью однократного запускаемого вручную букмарклета.

Количество слов

Счетчики слов являются полезными инструментами, но это не та вещь, которую вы ожидаете в наборе инструментов для просмотра, и не очень пригодится для обычного серфинга. Но для разработки — и особенно для написания статей непосредственно в HTML, как я всегда делаю — удобно иметь счетчик, работающий во время написания.

Просмотрите или установите скрипт word-count.user.js из архива кода.

Этот сценарий использует технику, аналогичную языковой корректору, который мы рассмотрели ранее, извлекая текст со страницы, просматривая элементы и просматривая их дочерние текстовые узлы. Затем он разбивает и обрабатывает текст для подсчета количества слов и отображает результат в атрибуте <title> (добавляя, а не перезаписывая его).

Размер области просмотра

Этот короткий скрипт просто читает размеры окна просмотра (внутреннего окна), используя свойства Mozilla, и отображает эти данные в <title> :

Просмотрите или установите скрипт viewport-size.user.js из архива кода.

Веселье с Greasemonkey

Я был рад осознать комедийный подход к написанию пользовательских сценариев… Это напоминает работу, которую я когда-то выполнял, когда мы развлекались написанием букмарклетов, которые вносили тонкие и не очень тонкие изменения в веб-сайт компании. Это заставило нас смеяться … и все это в конечном счете безвредно, поэтому, если вы хотите, чтобы серьезные сайты выглядели глупо, я за то, чтобы показать вам, как. Вот пара простых сценариев, которые делают Интернет более интересным местом!

Назовите эту знаменитость

Имена политиков, лидеров отрасли и других известных людей созрели для превращения в комичные фразы … Я покажу вам основной сценарий, сделав несколько … э-э … корректировок некоторых имен, которые вы, несомненно, будете знать:

Просмотрите или установите скрипт name-that-celebrity.user.js из архива кода.

Этот пример аналогичен сценарию языкового корректора, поскольку он извлекает текст со страницы и вносит изменения в перечисленные слова на полуслучайной основе.

Smurfify

Этот последний сценарий милый и глупый. Он анализирует текст, чтобы найти слова в определенных шаблонах, и заменяет некоторые из них на «smurf»:

Просмотрите или установите скрипт smurfify.user.js из архива кода.

Пользователь JS в Опере и за ее пределами

Opera некоторое время планировала пользовательский JavaScript, и теперь эта функция доступна в Opera 8, которая была введена в бета-версию и объявлена ​​Холвордом Стееном в недавней записи в журнале . (Хотя, что забавно, это не первая реализация, которая станет достоянием общественности — редакция Opera 7 «Bork» загрузила файл JS на страницы MSN, чтобы преобразовать их в язык шведского шеф-повара Маппетса!)

Пользовательские сценарии работают аналогично Greasemonkey в Opera. Браузер реализует режим прямой совместимости, но он также предлагает дополнительные функциональные возможности в виде событий специального назначения из объекта window.opera и на самом деле предназначен только для опытных пользователей, поскольку требуется некоторая ручная настройка. Rijk van Geijtenbeek обладает самыми полными ресурсами для написания пользовательских сценариев в Opera , и преобразование примеров этой статьи по большей части не должно быть сложным, тем более что мы планировали что-то подобное с самого начала.

Работа и разрешения пользовательских сценариев могут измениться или привести к изменению браузеров в зависимости от того, как люди его используют. Но, что бы ни случилось, ясно, что пользовательские сценарии здесь, чтобы остаться. Подобная функциональность доступна в Safari через плагин для браузера под названием PithHelmet , и даже повсеместный Internet Explorer скоро включится в действие, благодаря Тодду Остермайеру и поэтически названному GreasemonkIE .

Я думаю, что подобные технологии хороши для Интернета, потому что они дают пользователям больший контроль над поведением Интернета, что улучшает общий доступ к информации. Но в нескольких углах присутствуют сильные нотки разногласий, и, возможно, скоро мы начнем применять методы кодирования анти-жиросухих, а затем анти-методы!

Я буду наблюдать за развитием событий с большим интересом.

Дополнительные ресурсы