JavaScript-действия в меню Оперы

Как вы вероятно знаете, в Опере есть возможность самостоятельно сконструировать меню из любых команд, однако в качестве «любых команд» можно использовать только предопределённые действия браузера вроде «New browser window», «Zoom in, 25» или «Switch to previous page». Их можно посмотреть в настройках клавиатуры и жестов — они там даже автозаполняются.

Действия Оперы

К сожалению, удобного интерфейса для редактирования меню нет; их нужно описывать в ini-файлах.

Самому же можно писать разные вещи на User JavaScript, который выполняется перед открытием каждой страницы. Но ведь хочется, чтобы код выполнялся не при открытии страницы, а тогда, когда мы его вызовем. Некоторые UJS-скрипты начинают с того, что навешивают свои обработчики на клавиатурные события, как, например, DocInspector (libretto.js), который показывается по Ctrl+Alt+F12.

Тем не менее, очевидного способа повесить выполнение UJS на какой-нибудь жест или пункт меню не существует. Однако есть остроумное решение этой проблемы:

  • В UJS-скрипте мы описываем функцию doSomething (), которую хотим выполнять
  • В качестве действия используем Go to page, «javascript:doSomething()»

То есть, если мы хотим повесить тот же DocInspector на жест или сочетание клавиш, то всё совсем просто, а если хотим сделать для него отдельный пункт меню, то придётся его дописать в menu.ini, как-нибудь так:

[Browser Tools Menu]
Item, "Show/Hide DocInspector" = Go to page, "javascript:toggleDocInspector();"

Изучив код libretto.js, пишем в нём нехитрую функцию toggleDocInspector:

function toggleDocInspector () {
  if (docInspector == null) docInspector = new DocInspector3Libretto ({showPanel:"JS"})
  else docInspector.toggle()
}

На этом же принципе построен UJS Retrieve Link Information, который позволяет вам добавить в popup-меню ссылок пункт «Узнать размер файла за ссылкой». Не все веб-дизайнеры утруждают себя указыванием размеров файлов, на которые дают ссылки, а плату за трафик пока, к сожалению, никто не отменял, так что это очень удобно!

Итого, мы можем довольно многообразно расширять функциональность Оперы, комбинируя UJS с действием «Go to page».

Дальше
2 комментария
Kildor 2006

рекомендую писать немного подругому:
Item, «Show/Hide DocInspector» = Go to page, «javascript:toggleDocInspector();»,1
таким образом, исчезает зависимость от opera:config#UserPrefs|NewWindow (оно же «Reuse current tab»)

frst 2006

офф
ух ты, у тебя редизайн основного сайта
сигналы сосут :)

Мои книги