JS-правила JustZix теперь работают даже на Facebook, X и GitHub
Страницы, на которых JS пользовательских скриптов раньше разваливался — Facebook, X, GitHub и многие другие со строгой Content-Security-Policy — были узким местом и для JustZix. В версии 3.2.0 мы изменили движок выполнения кода так, чтобы он пробивал этот барьер без хитростей и без компромиссов на остальной части веба. Вот что он делает и почему.
Что именно блокировала CSP
Content-Security-Policy с директивой script-src, в которой отсутствуют 'unsafe-eval' и 'unsafe-inline', говорит браузеру: «не выполнять код, построенный из строки». Именно эта политика блокирует классический new Function('...code...')(), через который JustZix выполнял JS правил и действий в мире MAIN вплоть до v3.1.x. Страницей, наиболее болезненно затронутой этим ограничением, была facebook.com — месяцами висевшая в нашем бэклоге с пометкой «сделать нельзя».
Три пути, одно решение
В v3.2.0 мы ввели многоуровневую стратегию — расширение пробует каждый путь, пока один не сработает:
chrome.userScripts.execute— нативный API пользовательских скриптов из Manifest V3. Он выполняет код как строку вне CSP-мира страницы, поэтому работает везде, включая самые строгие политики. Требует разрешенияuserScriptsв манифесте (оно у нас есть) и разового переключения «Разрешить пользовательские скрипты» в настройках расширений браузера (вы нажимаете, вы остаётесь в контроле).new Function— быстрый, классический путь, когда CSP страницы допускает'unsafe-eval'. Большинство обычных сайтов это позволяют (Google, YouTube, Reddit, Wikipedia, интернет-магазины), поэтому 99% ваших правил продолжают идти этим путём вообще без какой-либо настройки.<script src="blob:…">— запасной вариант, который создаёт локальный Blob URL и подставляет его как классический тегscript. Он работает, когда CSP страницы допускаетblob:вscript-src, — а facebook.com это допускает. Он позволяет запускать код, даже если пользователь ещё не включил «пользовательские скрипты».
Что это значит на практике
JS-правила JustZix, действия и окна TEMP JS / JS Console теперь работают на страницах, которые раньше выбрасывали EvalError:
- facebook.com — через запасной blob-скрипт, без какой-либо настройки;
- x.com / twitter.com, github.com, части банковских сайтов — полное покрытие после включения «пользовательских скриптов»;
- везде остальное — без изменений, классический
new Function, как и раньше.
Если ни один путь не работает (редкий случай, требует, чтобы страница запрещала и 'unsafe-eval', и blob:), окна JS-панели и JS Console показывают понятное сообщение «включите пользовательские скрипты» на 8 языках. Один клик в настройках браузера — и остальное автоматически.
Как включить «пользовательские скрипты»
- Chrome / Edge / Opera:
chrome://extensions→ включите «Режим разработчика» (Developer mode) в правом верхнем углу → найдите JustZix → переключите «Разрешить пользовательские скрипты» (Allow user scripts). - Firefox:
about:addons→ JustZix → кнопка «Настройки» (Preferences) → включите опцию пользовательских скриптов.
Разрешение запоминается раз и навсегда. Мы не добавляли собственного экрана согласия — это сознательный выбор в настройках браузера, а не неожиданный запрос от нас.
Почему это важно по сравнению с альтернативами
Расширениям для пользовательских скриптов вроде Tampermonkey или Violentmonkey требуется, чтобы страница допускала 'unsafe-eval', либо они полагаются на собственную песочницу с eval. У JustZix три пути, поэтому там, где те выбрасывают «ошибку CSP» и ждут милости от автора страницы, мы тихо выбираем альтернативу. Это самое крупное архитектурное изменение с начала проекта — и именно оно наконец делает осмысленными примеры-пакеты для Facebook, X и GitHub в каталоге.
Смотрите также
- Внедрение CSS и JavaScript — что ещё умеет движок правил
- Хук Output Console на страницах со строгой CSP — аналогичная история для логов
- JustZix против Tampermonkey — полное сравнение
Установите JustZix — и пишите правила на facebook.com без отговорок.
Оцени эту статью
Оценок пока нет — оцени первым.