GreaseMonkey

индекс
148,13

Пишем кроссбраузерный UserJS. Пример №2: переопределяем alert()

Начало: Пример №1: меняем логотип Яндексу

Прошлый раз меня спросили: "А из UserJS есть доступ к переменным страницы?".

Ответ: да.

Я покажу пример с функцией alert(). alert — переменная страницы, метод window. Заместо alert может быть любая другая переменная.


Opera и Safari GreaseKit


window.alert = function(){ ... }


Firefox


window.wrappedJSObject.alert = function(){ ... }

Помните window.wrappedJSObject из прошлой статьи? Нет? Тогда goto "Пример №1: меняем логотип Яндексу".

Вариант работающий в Опере, Файрфокс и Safari GreaseKit:

var w = window.wrappedJSObject || window;
w.alert = function(){ ... }

Nice alert, скрипт, который я делал, использует именно этот код.

Google Chrome


В Google Chrome 3 можно было обратиться к window страницы через contentWindow. В Chrome 4 это убрали из соображений безопасности. Говорят, пишите так:

location.href = "javascript:window.alert=function(){ ... }

Примечание: Я вообще не вижу смысла писать UserJS для Хрома. Нужно писать .CRX расширения, они обновляться умеют. Это тот же UserJS, но в архиве (плюс мелочь типа manifest.json). Поэтому, про Хром писать я пока не буду.

Продолжение: Пример №3: TwitPic thumbnails
+22
31 октября 2009, 14:32
24

комментарии (13)

0
Ordos #
Сегодня утром как раз прочитал первую статью и убрал рекламу в яндексе )
Хотелось бы узнать про блок ==Userscript==, а то у вас в примере используется @include, а где-то я видел @match. Вобщем хотелось бы узнать что там можно писать вообще.
Ну и про Хром было бы интересно почитать! )
–1
shifttstas #
У хрома отличее что надо еще манифест файл сделать, но можно сделать авто обновление, ну и все запаковываеться в crx и подписываеться…
0
Ordos #
Не обязательно, я и без манифеста сделал, просто *.js файлом
–1
shifttstas #
я говорю для заворачивания в CRX и поддержки авто апдейта
0
insaner #
Вот теперь я понял где это может быть полезно. Спасибо.
0
CobaltD #
Thx за статьи.
Возможно полезным примером был бы userjs который реализует свою кнопку убиения популярных ныне div-попапов.
–5
Nulldevice #
Отличную штуку добавили браузеры для создания эксплоитов!
+2
Nulldevice #
Правду говорить легко и приятно. © Булгаков. Мастер и Маргарита.
–4
Nulldevice #
Ordos: Сегодня утром как раз прочитал первую статью и убрал рекламу в яндексе )

Не забудьте убить рекламу Гула. Только так можно победить самого Гугла (у которого, все-таки, основной бизнес контекстная реклама)
0
Kakysha #
неожиданно скоро появилась и вторая статья! Спасибо!
0
Guria #
1. В Хром не зря убрали доступ к window. Не мешает описать почему это может оказаться опасным.
2. В Хром планируют прикрутить автоматический конвертер user.js to crx, генерируя manifest из блока
==Userscript==
0
Mephistophele #
Я сделал это так:

.....
  Constructor.prototype.AlertEx = function()
    {
      if(JSDbg.overAlert == true)
      {
        trace('test');
      }
      else
      {
        _alert('test');
      }
    }
.....

window._alert = window.alert;
window.alert = JSDbg.AlertEx;


* This source code was highlighted with Source Code Highlighter.


привожу немного урежанный вариант, тестировалось и работает под FF и IE, под остальные браузеры ещё «руки не дошли».

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