GreaseMonkey

индекс
148,13

Nice alert

nice-alert.user.js заменяет модальный диалог alert

модальный диалог alert

на ненавязчивое сообщение в правом верхнем углу страницы.

Nice alert box

Работает в Opera, Firefox Greasemonkey и Safari GreaseKit.

Cкачать nice_alert.user.js. (для Оперы, и только для неё, нужно скачать nice_alert.js, без «user».)

Код на github-е. Скрипт на userscripts.org.
+46
28 сентября 2009, 16:42
37

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

+1
nkid #
Никогда не напрягался модальностью алертов, но, черт подери, классно сделано!
–4
Dangelweb #
Супер, а для Internet Explorer 6 есть такой же?
+1
ELV1S #
В качестве UserJS — не встречал.

А просто JS (не UserJS) решений полно. На Хабре сообщения об ошибках выводятся похожим способом.
+3
romanoza #
просто интересно, а зачем?
–2
aleksandro #
Хотя бы потому что 20% людей используют еще его.
–2
dna #
ну так пускай используют, кто ж им не дает то.
0
romanoza #
и?
не думаю, что люди, которые знают, что такое скрипт и грисманки используют ие6
+4
ingeniarius #
У модальных диалогов есть особенность прерывать поток исполнения — с таким решением такое поведение измениться.
НЛО прилетело и опубликовало эту надпись здесь
0
hollow #
а вот представьте что будет с вашим браузером и таким User JS когда вы попадете (мб случайно) на сайты розыгрыши… аля «Вы сюда попали вам не уйти (жмакаем ок) — появляется сл сообщение такого рода»… а когда кнопки ок нету и это все будет оч быстро происходить? ваш браузер может не выдержать :)
0
ingeniarius #
В таких случаях диалог сделают не модальным
0
TheShock #
а автор скрипта и автор новости — один и тот же человек?

мне вот что интересно — ну почему нельзя сделать, чтобы алерт блокировал только один таб, а не весь браузер?
0
ingeniarius #
На то он и alert :)
0
CriggerMarg #
ну собственно это из-за того, что браузере все табы работают в одном потоке. в Хроме, насколько я помню, такой проблемы уже не стоит. Но надо проверить
0
CriggerMarg #
кстати похоже что автор новости и скрипта — один человек. у него в инфо на юзерскриптс написан сайт, совпадающий с ником на хабре
0
ELV1S #
Да, один и то же :-)

А смысл блокировки?
0
TheShock #
не, отличное расширение — я себе уже поставил.
и согласен, что алерту блокировка бывает крайне редко нужна.
+2
dotCypress #
Я вижу алерты только при отладке своего кода, на других сайтах еще не встречал :)
0
Fredy314 #
Это наверное потому что AdBlock Plus
+1
dotCypress #
Это потому что не хожу по всяким мусоркам :)
и у меня Хром.
0
TheShock #
сижу я, Хабру читаю, а тут «какой-то сайт с рефератами» в соседнем табе по таймауту мне алерт выдает!
алерт — он ведь к определенной странице относится, а не к моему браузеру.
если бы не AlertStopper, то даже случайная ошибка в собственном скрипте, во время дебагинга, заставила бы меня перезапускать все вкладки в браузера.
0
TheShock #
пс. Это был ответ к дереву выше на коммент ingeniarius'а:
На то он и alert :)
0
ELV1S #
Зачем блокировать таб, если можно его не блокировать? Мой скрипт как раз не блокирует.
0
CriggerMarg #
с помощью вашего скрипта я смог сделать себе пустую подпись на gmail =)
0
mayhem #
ваш алерт не всегда вілазит поверх всех окон :) сделайте ему z-index побольше :)
0
ELV1S #
Это на каком сайте? z-index: 9999 хватит? :-)
0
mayhem #
вполне :)
0
kns #
Не разбираюсь в js.
При сохранении настроек в гуглопоиске вылеает алерт — его скрипт успешно заменяет.
А вот строчка <script>alert('Ky-Ky!');</script> все равно вызывает блокирующий диалог.
0
kns #
Забыл: Opera 10 final.
0
TheShock #
Firefox 3: +1
0
ELV1S #
Починено! Но только для Оперы.

Важное примечание: скрипт должен называться nice-alert.js, без «user». Иначе Опера будет работать в режиме совсестимости с Gresemonkey и запускать скрипты позже.

Теперь на early-run.html все алерты в Опере должня быть nice.
0
kns #
Да, работает. Спасибо еще раз за скрипт.
0
SKYnv #
потверждаю на Opera 10.10 beta
0
ELV1S #
Есть проблема с ранним запуском. UserJS срабатывает слишком поздно.

Я починю это для Оперы. А вот для Файрфокса не получится, так как Greasemonkey начинает работать всегда после загрузки страницы.
0
baal #
Интересно, можно ли создать аналог Greasemonkey, который запускается до загрузки страницы?
0
ELV1S #
Я планирую написать add-on для Firefox-а. Это заодно и решит проблему c перекрыванием стилей.
0
SKYnv #
ну еще можно с таким скриптом заспамить алертами и вереница уползет далеко вниз за пределы страницы. может какую-нибудь опцию типа закрыть все?
0
ELV1S #
Я пока не встречал сайтов, где такое происходит. Когда встречу, чего-нибудь придумаю.
0
SKYnv #
ну это пресловутые сайты шутки ) а у вас на юзерскрипт я просто зажал enter на поле ввода и вылезло много-много )
0
TheShock #
а если в цикле случайно алерт закрадётся — браузер не упадёт?
+1
Lord_Daedra #
Мне кажется, весьма спорная штука… Конечно, так в большинстве случаев удобнее, но вдруг там действительно важное сообщение, которое необходимо прочитать… а справа там «мертвая зона» для глаз, можно просто не заметить это сообщение… Кнопки ОК там нет, значит, сообщение пропадёт само через несколько секунд…

Решил себе всё же не ставить…
0
Roy #
Плохо только, что стили документа к нему применяются…
0
ELV1S #
На каких сайтах с этим проблемы?
0
Roy #
Здесь например благополучно получим невидимый текст
agtp.romhack.net/project.php?id=cavestory
0
ELV1S #
Исправил.
0
Roy #
Это чтобы исправить, нужно все существующие стили c !important перечислять…
0
xdemon #
жаль в chrome не работает.
0
ELV1S #
Да, почему-то не работает. Я пока не могу понять почему.
+1
Lexi #
Для третьего хрома: var w = contentWindow || window.wrappedJSObject || window;
0
xdemon #
в четверке (dev build) не хочет.
+1
Lexi #
Для неё потребуется больше изменений: groups.google.com/group/chromium-extensions/browse_thread/thread/a4ff886cfecf80ca
0
ELV1S #
Спасибо.

Вы знаете что именно нужно поменять в nice-alert.user.js, чтобы он заработал? Я прочитал всю дискуссию, и мне не стало ясно в чём проблема.

Если я добавляю alert(123) в конец самого скрипта, то он работает. Если вызываю alert со страницы, то нет.
+1
Lexi #
Проблема в том что window в скрипте и на веб-странице разные. В дискуссии предлагали сделать так:

location.href=«javascript:(function(){ваш_код})()»

Только двойные кавычки из GM_addStyle уберите. Сжать код в одну строчку можно с помощью dean.edwards.name/packer/

После этого достаточно логичным представляется его конвертация в расширение.

manifest.json
{
«name»: «Nice alert»,
«version»: «0.73»,
«description»: «Not modal alert box »,
«content_scripts»: [
{
«matches»: [«http://*/*», «https://*/*», «file://*»],
«js»: [«nice_alert.user.js»]
}
]
}

Запускаем конвертацию: «c:\Documents and Settings\aRuzanow\Local Settings\Application Data\Google\Chrome\Application\chrome.exe» --pack-extension=c:\extensions\nice_alert

Результат: ruzanow.ru/extensions/nice_alert.crx
+1
ELV1S #
Спасибо за расширение! Оно работает.

location.href=«javascript:...» — это убожество. Разработчики Хрома странные люди. Они оставили доступ к window страницы, но сделали его неудобным для разработчиков. Security от этого лучше не стало.

Получается, что Хром 4 не имеет обратную совместимость с большинством UserJS. Это очень плохо.
+1
yopopt #
Здорово! Спасибо. :)
Единственное, хорошо бы долбавить !important к css-свойствам, чтобы не перекрывались стилями страницы.
0
nett00n #
А можно ссылку пример? ^_^'
Заборзел, ага =)
0
ELV1S #
Самая первая ссылка в посте.
0
kns #
А сделайте, пожалуйста, еще оперное расширение.

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