← Все статьи

API и хелперы

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 мы ввели многоуровневую стратегию — расширение пробует каждый путь, пока один не сработает:

  1. chrome.userScripts.execute — нативный API пользовательских скриптов из Manifest V3. Он выполняет код как строку вне CSP-мира страницы, поэтому работает везде, включая самые строгие политики. Требует разрешения userScripts в манифесте (оно у нас есть) и разового переключения «Разрешить пользовательские скрипты» в настройках расширений браузера (вы нажимаете, вы остаётесь в контроле).
  2. new Function — быстрый, классический путь, когда CSP страницы допускает 'unsafe-eval'. Большинство обычных сайтов это позволяют (Google, YouTube, Reddit, Wikipedia, интернет-магазины), поэтому 99% ваших правил продолжают идти этим путём вообще без какой-либо настройки.
  3. <script src="blob:…"> — запасной вариант, который создаёт локальный Blob URL и подставляет его как классический тег script. Он работает, когда CSP страницы допускает blob: в script-src, — а facebook.com это допускает. Он позволяет запускать код, даже если пользователь ещё не включил «пользовательские скрипты».

Что это значит на практике

JS-правила JustZix, действия и окна TEMP JS / JS Console теперь работают на страницах, которые раньше выбрасывали EvalError:

Если ни один путь не работает (редкий случай, требует, чтобы страница запрещала и 'unsafe-eval', и blob:), окна JS-панели и JS Console показывают понятное сообщение «включите пользовательские скрипты» на 8 языках. Один клик в настройках браузера — и остальное автоматически.

Как включить «пользовательские скрипты»

Разрешение запоминается раз и навсегда. Мы не добавляли собственного экрана согласия — это сознательный выбор в настройках браузера, а не неожиданный запрос от нас.

Почему это важно по сравнению с альтернативами

Расширениям для пользовательских скриптов вроде Tampermonkey или Violentmonkey требуется, чтобы страница допускала 'unsafe-eval', либо они полагаются на собственную песочницу с eval. У JustZix три пути, поэтому там, где те выбрасывают «ошибку CSP» и ждут милости от автора страницы, мы тихо выбираем альтернативу. Это самое крупное архитектурное изменение с начала проекта — и именно оно наконец делает осмысленными примеры-пакеты для Facebook, X и GitHub в каталоге.

Смотрите также

Установите JustZix — и пишите правила на facebook.com без отговорок.

Оцени эту статью

Оценок пока нет — оцени первым.

Попробуй сам

Установи JustZix и вставь любой сниппет из этой статьи. Две минуты от нуля до работающего правила на всех твоих устройствах.

Получить JustZix

Возможности · Как это работает · Примеры · Применение