Pull to refresh

Comments 23

вы забыли упомянуть что в отличии от FF. в Chrome не разрешен @require. Поэтому для использования сторонних библиотек и в FF и Chrome/Chrominium нужно/можно использовать function addJQuery(callback)
Спасибо за внимательность.

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

@require поддерживается только в Firefox.
Я считаю, что любые «плюшки», которые отсутствуют в других браузерах, упоминать не стоит.Подробная информация о разработке под GreaseMonkey может занять не одну статью.

Если какой-то функционал GM API можно «эмулировать» кроссбраузерно (и я знаю такой способ), я напишу об этом в соответствующей статье.

Кстати, любую библиотеку можно инжектировать в скрипт. Я предпочитаю как раз такой способ. О его преимуществах и недостатках я напишу отдельно (на примере jQuery).

Оставайтесь с нами :)
Скажите, как Вы перезапускаете юзерскрипт в Хроме после изменений?
Мой, например, порядок действий — довольно сложный и неудобный, поэтому Хром не был приоритетным инструментом для разработки (а должен бы, если отладка такая удобная).
1) отыскиваю где-то в юзерских папках каталог, имеющий имя в виде ID скрипта;
2) меняю скрипт;
3) полностью закрываю браузер, все его окна и вкладки (а как иначе?), поэтому приходится держать в Хроме открытыми 1-2 вкладки, чтобы не перезагружать их много;
4) запускаю браузер (с установкой «Открывать последнюю сессию»).
Отладив скрипт, сохраняю в другой, постоянный файл на случай потери инсталляции браузера или для переноса.

В FF действия по перезапуску намного проще — просто сохраняешь файл, а Scriptish сам оповещает, что файл изменился после перезагрузки страницы со скриптом.

Что я делаю с Хромом не так? Может быть, Tampermonkey как то облегчает эту задачу?
Хм, действительно странная последовательность действий.

У меня процесс происходит так:
1. Если разрабатывается «голый» юзерскрипт:
а) Модифицируем скрипт.
б) Закидываем в браузер.
в) Соглашаемся на установку.
г) Рефрешаем страницу.

После рефреша работает новый скрипт. Если у вас не работает, попробуйте НЕ МЕНЯТЬ @version и @namespace.
Если всё равно скрипт не обновляется, то читайте дальше.

2. Если разрабатывается расширение, 1ый способ:
а) Модифицируем скрипт.
б) Пакуем скрипт в расширение (используя имеющийся файл-ключ).
в) Закидываем расширение в браузер.
г) Соглашаемся установить.
д) Заходим в Расширения и выключаем-включаем расширение.
е) Рефрешаем страницу

3. Если разрабатывается расширение, 2ой способ:
а) Модифицируем скрипт.
б) Ищем папку, в которую распаковано расширение.
в) Заменяем скрипт.
г) Заходим в Расширения и выключаем-включаем расширение.
д) Рефрешаем страницу

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

Обратите внимание, если файл-ключ будет разный, то две одинаковых версии расширения (одинаковые метаданные) будут считаться разными.
Кнопка Reload для распакованного расширения почему не упоминается?
Видимо потому, что я ей никогда не пользовался. Как и распакованным расширением.
Что-то мне подсказывает, что зря не пользовался.
> Поддержка в Safari
Устанавливал через расширение Ninjakit для Safari 5.xx какие-то скрипты, работали нормально, только время срабатывания после начала загрузки было побольше, чем у других браузеров, хотя оно есть у всех.

> Ввиду отсутствия поддержки юзерскриптов в менее популярных браузерах и мобильных браузерах…
Мобильные браузеры Opera Mobile и Firefox Mobile поддерживают юзерскрипты. Например, среди аддонов addons.mozilla.org/en-us/mobile/ найдётся Scriptish. В Оперу надо вставлять скрипты в настройки, если расширение для этого ещё не придумали.
Спасибо, вы мне напомнили об одном упущенном моменте.

В IE, в обоих плагинах юзерскрипты запускаются по window.onLoad.
Вероятно, в Ninjakit аналогично.

Добавил информацию в статью.
Нативная поддержка юзерскриптов в Хроме не помогла сделать полную их поддержку, даже не смотря на все танцы с бубнами и извороты скрипт изначально писавшийся под ГМ никак не хотел работать в хроме.
Для начала избавьтесь от GM API в любом виде. GM_get/setValue заменяется на localStorage. С кроссдоменными запросами будет сложнее, придётся оборачивать в экстеншн (юзерскрипт выступает в роли контент-скрипта и к нему применим стандартный chrome.extension.onRequest мост).

С Xpath тоже не всё в порядке, могут возникнуть проблемы.

В крайнем случае, выложите скрипт на pastebin.com.
И не стесняйтесь стучаться в скайп по вечерам :)
Спасибо, обязательно постучим))
Поддержка в Opera
Расширения: На сколько мне известно, их нет.

Средство для удобного урпавления скриптами в Опере всё-таки есть. Это приложение написанное для Opera Unite — UJS Manager
Отлично, добавил в статью!
Супер, не знал.
Мои знания юзерскриптов для Оперы ограничены началом 2010 года.
Я под Chrome использую дополнение Ninja Script. Лично для меня и моих целей вполне подходит :).
Спасибо за эти две статьи. Написал один скриптик для навязчивого наг-окна на одном сайтике, удалялось только при помощи Deloper Tools хрома… А сейчас автоматически :)
Интересна тема кроссдоменных запросов.
С кроссдоменными запросами беда только в IE. Без доступа к серверу их реализовать не получится (только JSONP или easyXDM. Можно использовать сторонние сервисы-прокси).
> setTimeout(0, function()

Поправьте :)

> Поддержка в Chrome. Не доступен document.frames[i].parent (разрешено в расширении).

Там есть проблемы и с встроенными фреймами: crbug.com/20773 Решается, например, проксированием через background.html
Да, вы правы во всём.

Фреймы действительно недоступны и, действительно, всё решается через проксирование.

Чтобы установить расширение в Chrome 77.0.3865.120 недостаточно просто "перетащить файл в браузер". Нужно:


  1. Открыть страницу "расширения" chrome://extensions/
  2. Включить режим разработчика (переключатель справа сверху)
  3. Перетащить скрипт на страницу расширений
  4. Подтвердить разрешения скрипта
Only those users with full accounts are able to leave comments. Log in, please.