← Wszystkie wpisy

API i helpers

Reguły JavaScript JustZix działają teraz nawet na Facebooku, X i GitHubie

Strony, na których JS userscriptów się rozsypywał — Facebook, X, GitHub i wiele innych z restrykcyjną Content-Security-Policy — były dotąd wąskim gardłem także dla JustZix. W wersji 3.2.0 zmieniliśmy silnik wykonywania kodu tak, by przebił tę barierę bez sztuczek i bez kompromisów dla pozostałych stron. Oto co robi i dlaczego.

Co właściwie blokował CSP

Content-Security-Policy z dyrektywą script-src bez słów 'unsafe-eval' i 'unsafe-inline' mówi przeglądarce: „nie wykonuj kodu zbudowanego z tekstu". To ta polityka blokuje klasyczne new Function('...kod...')(), którym do v3.1.x JustZix uruchamiał JS reguł i akcji w świecie MAIN. Strona, którą najmocniej dotykało to ograniczenie, to facebook.com — od miesięcy w naszym backlogu pod hasłem „nie da się".

Trzy ścieżki, jedna decyzja

W v3.2.0 wprowadziliśmy warstwową strategię — wtyczka próbuje kolejne ścieżki, aż któraś zadziała:

  1. chrome.userScripts.execute — natywne API skryptów użytkownika z Manifestu V3. Wykonuje kod jako string poza światem CSP strony, więc działa wszędzie, łącznie z najtwardszymi politykami. Wymaga uprawnienia userScripts w manifeście (mamy je) oraz jednorazowego przełącznika „Zezwól na skrypty użytkownika" w ustawieniach rozszerzeń przeglądarki (sami klikacie, sami kontrolujecie).
  2. new Function — szybka, klasyczna ścieżka, gdy CSP strony dopuszcza 'unsafe-eval'. Większość typowych stron na to pozwala (Google, YouTube, Reddit, Wikipedia, sklepy internetowe), więc 99% Twoich reguł nadal idzie tą drogą bez żadnej konfiguracji.
  3. <script src="blob:…"> — fallback, który tworzy lokalny Blob URL i wstrzykuje go jako klasyczny tag script. Działa, gdy CSP strony dopuszcza blob: w script-src — co robi m.in. facebook.com. Pozwala zadziałać nawet wtedy, gdy użytkownik nie włączył jeszcze „Skryptów użytkownika".

Co to znaczy w praktyce

Reguły JS, akcje JustZix oraz okna TEMP JS i JS Console działają teraz na stronach, na których wcześniej rzucały EvalError:

Jeśli żadna ścieżka nie zadziała (rzadkie, wymaga równoczesnego zakazu 'unsafe-eval' oraz blob:), okna JS pane i JS Console pokazują czytelny komunikat z instrukcją „włącz Skrypty użytkownika" w 8 językach. Po jednym kliknięciu w ustawieniach reszta jest automatyczna.

Jak włączyć „Skrypty użytkownika"

Zgoda zostaje zapamiętana raz na zawsze. Nie wprowadziliśmy własnego ekranu zgody — to świadoma decyzja w ustawieniach przeglądarki, nie zaskakujący prompt z naszej strony.

Dlaczego to różnica względem konkurencji

Wtyczki userscript w stylu Tampermonkey/Violentmonkey wymagają od strony, by przepuściła 'unsafe-eval', albo polegają na własnym sandboxie z eval. JustZix ma trzy ścieżki, więc tam, gdzie one rzucają „CSP error" i czekają na łaskę autora strony, my po cichu wybieramy ścieżkę alternatywną. To największa pojedyncza zmiana architektoniczna od początku projektu — i ta, dzięki której katalog gotowców dla Facebooka, X i GitHuba nareszcie ma sens.

Zobacz też

Zainstaluj JustZix — i pisz reguły na facebook.com bez wymówek.

Oceń ten wpis

Brak ocen — oceń jako pierwszy.

Wypróbuj samodzielnie

Zainstaluj JustZix i wklej dowolny snippet z tego artykułu. Dwie minuty od zera do działającej reguły na wszystkich Twoich urządzeniach.

Pobierz JustZix

Funkcje · Jak to działa · Przykłady · Zastosowania