Комментарии 23
вы забыли упомянуть что в отличии от FF. в Chrome не разрешен @require. Поэтому для использования сторонних библиотек и в FF и Chrome/Chrominium нужно/можно использовать function addJQuery(callback)
0
Спасибо за внимательность.
Если вы читали первую статью, то могли заметить, что директивы @require нету в таблице распространенных директив. Я специально не указывал там директивы, которые не поддерживаются кроссбраузерно.
@require поддерживается только в Firefox.
Я считаю, что любые «плюшки», которые отсутствуют в других браузерах, упоминать не стоит.Подробная информация о разработке под GreaseMonkey может занять не одну статью.
Если какой-то функционал GM API можно «эмулировать» кроссбраузерно (и я знаю такой способ), я напишу об этом в соответствующей статье.
Кстати, любую библиотеку можно инжектировать в скрипт. Я предпочитаю как раз такой способ. О его преимуществах и недостатках я напишу отдельно (на примере jQuery).
Оставайтесь с нами :)
Если вы читали первую статью, то могли заметить, что директивы @require нету в таблице распространенных директив. Я специально не указывал там директивы, которые не поддерживаются кроссбраузерно.
@require поддерживается только в Firefox.
Я считаю, что любые «плюшки», которые отсутствуют в других браузерах, упоминать не стоит.Подробная информация о разработке под GreaseMonkey может занять не одну статью.
Если какой-то функционал GM API можно «эмулировать» кроссбраузерно (и я знаю такой способ), я напишу об этом в соответствующей статье.
Кстати, любую библиотеку можно инжектировать в скрипт. Я предпочитаю как раз такой способ. О его преимуществах и недостатках я напишу отдельно (на примере jQuery).
Оставайтесь с нами :)
+4
Скажите, как Вы перезапускаете юзерскрипт в Хроме после изменений?
Мой, например, порядок действий — довольно сложный и неудобный, поэтому Хром не был приоритетным инструментом для разработки (а должен бы, если отладка такая удобная).
1) отыскиваю где-то в юзерских папках каталог, имеющий имя в виде ID скрипта;
2) меняю скрипт;
3) полностью закрываю браузер, все его окна и вкладки (а как иначе?), поэтому приходится держать в Хроме открытыми 1-2 вкладки, чтобы не перезагружать их много;
4) запускаю браузер (с установкой «Открывать последнюю сессию»).
Отладив скрипт, сохраняю в другой, постоянный файл на случай потери инсталляции браузера или для переноса.
В FF действия по перезапуску намного проще — просто сохраняешь файл, а Scriptish сам оповещает, что файл изменился после перезагрузки страницы со скриптом.
Что я делаю с Хромом не так? Может быть, Tampermonkey как то облегчает эту задачу?
Мой, например, порядок действий — довольно сложный и неудобный, поэтому Хром не был приоритетным инструментом для разработки (а должен бы, если отладка такая удобная).
1) отыскиваю где-то в юзерских папках каталог, имеющий имя в виде ID скрипта;
2) меняю скрипт;
3) полностью закрываю браузер, все его окна и вкладки (а как иначе?), поэтому приходится держать в Хроме открытыми 1-2 вкладки, чтобы не перезагружать их много;
4) запускаю браузер (с установкой «Открывать последнюю сессию»).
Отладив скрипт, сохраняю в другой, постоянный файл на случай потери инсталляции браузера или для переноса.
В FF действия по перезапуску намного проще — просто сохраняешь файл, а Scriptish сам оповещает, что файл изменился после перезагрузки страницы со скриптом.
Что я делаю с Хромом не так? Может быть, Tampermonkey как то облегчает эту задачу?
0
Хм, действительно странная последовательность действий.
У меня процесс происходит так:
1. Если разрабатывается «голый» юзерскрипт:
а) Модифицируем скрипт.
б) Закидываем в браузер.
в) Соглашаемся на установку.
г) Рефрешаем страницу.
После рефреша работает новый скрипт. Если у вас не работает, попробуйте НЕ МЕНЯТЬ @version и @namespace.
Если всё равно скрипт не обновляется, то читайте дальше.
2. Если разрабатывается расширение, 1ый способ:
а) Модифицируем скрипт.
б) Пакуем скрипт в расширение (используя имеющийся файл-ключ).
в) Закидываем расширение в браузер.
г) Соглашаемся установить.
д) Заходим в Расширения и выключаем-включаем расширение.
е) Рефрешаем страницу
3. Если разрабатывается расширение, 2ой способ:
а) Модифицируем скрипт.
б) Ищем папку, в которую распаковано расширение.
в) Заменяем скрипт.
г) Заходим в Расширения и выключаем-включаем расширение.
д) Рефрешаем страницу
Как видите, ключевым моментом является выключение-включение расширения. При включении хром загружает расширение в память заново.
Обратите внимание, если файл-ключ будет разный, то две одинаковых версии расширения (одинаковые метаданные) будут считаться разными.
У меня процесс происходит так:
1. Если разрабатывается «голый» юзерскрипт:
а) Модифицируем скрипт.
б) Закидываем в браузер.
в) Соглашаемся на установку.
г) Рефрешаем страницу.
После рефреша работает новый скрипт. Если у вас не работает, попробуйте НЕ МЕНЯТЬ @version и @namespace.
Если всё равно скрипт не обновляется, то читайте дальше.
2. Если разрабатывается расширение, 1ый способ:
а) Модифицируем скрипт.
б) Пакуем скрипт в расширение (используя имеющийся файл-ключ).
в) Закидываем расширение в браузер.
г) Соглашаемся установить.
д) Заходим в Расширения и выключаем-включаем расширение.
е) Рефрешаем страницу
3. Если разрабатывается расширение, 2ой способ:
а) Модифицируем скрипт.
б) Ищем папку, в которую распаковано расширение.
в) Заменяем скрипт.
г) Заходим в Расширения и выключаем-включаем расширение.
д) Рефрешаем страницу
Как видите, ключевым моментом является выключение-включение расширения. При включении хром загружает расширение в память заново.
Обратите внимание, если файл-ключ будет разный, то две одинаковых версии расширения (одинаковые метаданные) будут считаться разными.
+2
> Поддержка в Safari
Устанавливал через расширение Ninjakit для Safari 5.xx какие-то скрипты, работали нормально, только время срабатывания после начала загрузки было побольше, чем у других браузеров, хотя оно есть у всех.
> Ввиду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах…
Мобильные браузеры Opera Mobile и Firefox Mobile поддерживают юзерскрипты. Например, среди аддонов addons.mozilla.org/en-us/mobile/ найдётся Scriptish. В Оперу надо вставлять скрипты в настройки, если расширение для этого ещё не придумали.
Устанавливал через расширение Ninjakit для Safari 5.xx какие-то скрипты, работали нормально, только время срабатывания после начала загрузки было побольше, чем у других браузеров, хотя оно есть у всех.
> Ввиду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах…
Мобильные браузеры Opera Mobile и Firefox Mobile поддерживают юзерскрипты. Например, среди аддонов addons.mozilla.org/en-us/mobile/ найдётся Scriptish. В Оперу надо вставлять скрипты в настройки, если расширение для этого ещё не придумали.
0
Нативная поддержка юзерскриптов в Хроме не помогла сделать полную их поддержку, даже не смотря на все танцы с бубнами и извороты скрипт изначально писавшийся под ГМ никак не хотел работать в хроме.
0
Для начала избавьтесь от GM API в любом виде. GM_get/setValue заменяется на localStorage. С кроссдоменными запросами будет сложнее, придётся оборачивать в экстеншн (юзерскрипт выступает в роли контент-скрипта и к нему применим стандартный chrome.extension.onRequest мост).
С Xpath тоже не всё в порядке, могут возникнуть проблемы.
В крайнем случае, выложите скрипт на pastebin.com.
И не стесняйтесь стучаться в скайп по вечерам :)
С Xpath тоже не всё в порядке, могут возникнуть проблемы.
В крайнем случае, выложите скрипт на pastebin.com.
И не стесняйтесь стучаться в скайп по вечерам :)
0
Поддержка в Opera
Расширения: На сколько мне известно, их нет.
Средство для удобного урпавления скриптами в Опере всё-таки есть. Это приложение написанное для Opera Unite — UJS Manager
0
Отлично, добавил в статью!
0
Есть ещё стороннее решение: UserJS Manager for Opera download.chip.eu/ii/172746660_64c980be7d.jpg
0
В Опере тоже можно упаковывать скрипты в расширения.
dev.opera.com/articles/view/converting-userjs-to-extensions/
dev.opera.com/articles/view/converting-userjs-to-extensions/
+1
Я под Chrome использую дополнение Ninja Script. Лично для меня и моих целей вполне подходит :).
0
Спасибо за эти две статьи. Написал один скриптик для навязчивого наг-окна на одном сайтике, удалялось только при помощи Deloper Tools хрома… А сейчас автоматически :)
0
Интересна тема кроссдоменных запросов.
0
> setTimeout(0, function()
Поправьте :)
> Поддержка в Chrome. Не доступен document.frames[i].parent (разрешено в расширении).
Там есть проблемы и с встроенными фреймами: crbug.com/20773 Решается, например, проксированием через background.html
Поправьте :)
> Поддержка в Chrome. Не доступен document.frames[i].parent (разрешено в расширении).
Там есть проблемы и с встроенными фреймами: crbug.com/20773 Решается, например, проксированием через background.html
+1
Чтобы установить расширение в Chrome 77.0.3865.120 недостаточно просто "перетащить файл в браузер". Нужно:
- Открыть страницу "расширения" chrome://extensions/
- Включить режим разработчика (переключатель справа сверху)
- Перетащить скрипт на страницу расширений
- Подтвердить разрешения скрипта
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Userscripts. Углубляемся