I really enjoyed PleaseFixThisSite.com (with thanks to @mattround for sharing it).
Not just because I appreciate a good #XKCD-inspired Web project (which of course I do). But because it gave me the excuse to remind everybody that #userscripts make the #Web a better place by writing a few lines of #Javascript that apply ALL the fixes, all the time -
I feel like the more time I spend in #jira, the more #userscripts I land up needing to make it work in some sensible way. All of which could easily be solved by some user (and I mean user, not project admin) preferences.
#FireMonkey est une #extension qui permet d'écrire ou de trouver des #userscripts (en #JavaScript) et #userstyles (en #CSS) pour modifier le comportement et l'apparence de sites web dans #Firefox sans avoir besoin de nombreuses extensions pour ça. Contrairement à la plupart des extensions existantes comme #GreaseMonkey, #Tampermonkey ou #ViolentMonkey, celle-ci utilise l'API #WebExtension Userscripts ajoutée à Firefox en 2019. En conséquence, elle est plus légère et plus sécurisée, puisque les scripts sont isolés dans leurs bacs à sable, mais n'est disponible que pour Firefox, cette API n'étant pas implémentée par Chrome ou autres.
L’ultimissimo miglioramento che ho in ogni caso poi fatto ad #MBViewer è stato l’aggiunta di una funzione per importare codice #CSS e #JavaScript, per modificare come i post possono essere visualizzati. Entrambi funzionano allo stesso modo, con i relativi parametri URL che accettano sia #URL esterni che data URI. Niente di particolare per gli stili, semplicemente importo nella pagina la qualunque cosa venga data lì, ma per gli #userscripts è stato leggermente più #complicato. ️
Il punto sta nel voler evitare che #script essenzialmente non affidabili siano iniettati nel contesto della pagina semplicemente da URL, perché potrebbero fare tante cosine cattive; prima fra tutte, rubare #dati dall’archiviazione del #browser del mio dominio, cosa che è un #problema, perché gli utenti inesperti che aprono la app da #link non andranno a cercare di investigare cosa accade dietro le quinte (e, molto probabilmente, non lo farei realisticamente nemmeno io, seguendo la logica del “i miei siti sono miei e li conosco, sui siti altrui ho le protezioni del browser attive“). E quindi inizio a scendere in un rabbithole…
#Iframe? Hmm… non so, non è il caso, sarebbero insicuri, ci sono alcuni modi in cui una pagina in frame può fare robe fastidiose. Non può essere assolutamente un’idea, proprio mai (foreshadowing). ️
Trovo un bel po’ di #librerie vecchie che ricompilano codice #JS per rimuovere pericoli, o lo analizzano preventivamente per la presenza di operazioni dannose così che possa non essere mai eseguito… praticamente tutte abbandonate, qualcuna esplicitamente dichiarata insicura e non patchata, e per qualcun’altra lo possiamo dare per scontato. ️
Forse questa libreria più recente, jailed, che sfrutta un iframe assieme ad un Web Worker per creare una sandbox forte e bloccare tutte le #API eccetto alcune che si decidono… No, l’ho provata e non va bene, non si riescono a passare alla sandbox oggetti complessi, tra cui i costruttori, è impossibile far funzionare API tipo quella del DOM. ️
Sarebbe stata un’idea usare qualche reimplementazione del #DOM per NodeJS tramite browserify, tipo Cheerio, ma farla anche solo girare lì dentro è un altro casino allucinante. ️
WASM tecnicamente è una #sandbox a sua volta, e non accede alle API del browser se non con codice colla, quindi magari… teoricamente ok, ma nella pratica non ho trovato nessuna soluzione già bella e pronta che potessi usare per questo specifico scopo.
La pazzia: PyScript… sarebbe quasi già pronto, ma avrei dovuto comunque modificarlo per bloccare tutte le API insicure (rimuovere #codice), e poi richiede 15+ MB di dipendenze di runtime… non ideale. ️
Alla fine ci ho pensato meglio, e sono arrivata alla conclusione che è abbastanza sicuro far girare gli script in un iframe con proprietà src="data:[...]" e sandbox="allow-scripts" (che significa, “blocca tutte le proprietà sensibili eccetto gli script”)… voglio dire, nel visualizzare il contenuto dei siti, già permetto eventuali iframe provenienti dai post, e quelli teoricamente possono già fare quello che vogliono eccetto accedere ai dati della finestra root. Nella pratica, i programmini degli utenti quindi hanno accesso a (quasi) l’intera API JavaScript senza poter fare cose bruttissime. ️
Ecco un esempio di tutto, alla fine: questo URL carica il mio MicroBlog, importa un foglio di #stile che mette questo font buffo, e uno script che colora le parole dei #messaggi in base a come si ripetono man mano (inutile, ma serve giusto per dare idea delle potenzialità)… https://hub.octt.eu.org/MBViewer/#/siteUrl=https://octospacc.altervista.org|platform=wordpress.org|includeStyle=[...]|includeScript=[...] (il link con tutta quella roba messa inline è una stringa di quasi 1 KB!). Userò tutta la cosa per rendere gli hashtag nel testo meno intrusivi per il mio sito anche lì, oltre che sul dominio originale. ️
Finisco con dati ancora più tecnici, per chi non ha una vita: con questo #design, ogni #userscript deve provvedere ad esporre una funzione che, tramite la Channel Messaging API, viene richiamata dalla #app per ogni messaggio appena questo viene aggiunto al documento visibile; questa funzione riceve dati utili (per ora, solo l’HTML del contenuto; oltre a dati come l’id del messaggio nel flusso, che non sono granché utili all’utente ma devono essere restituiti alla app) e può rimandare nuovi dati indietro richiamando una funzione che è invece l’applicazione ad esporre allo script. Tutto questo ambaradan permetterebbe agli script di effettuare anche operazioni asincrone, comunque, non per forza di dover agire immediatamente alla chiamata. ️
I've created a userscript that loads sp.css if <head> has no defined styles. I hoped that this improve appearance of some HTML docs generated by man2html and texi2html. And it does, e. g. for /usr/share/doc/bash/bash.html on my system or termutils
TIL a userscript extension is available for Safari on iPad/iPhone.
One of the big things I was missing between desktop and mobile device browsers was the ability to run tampermonkey-like scripts, and now I can :) It also means I can remove some apps that have a better web browser + userscript experience than their actual apps (yes, looking at you #twitch)
@czottmann@thomasfuchs I do that kind of things with #userscripts, files in Firefox’s profile, and some command line tools (and/or #Shortcuts, lately). Not easy, but no more difficult than assembling an AppleScript incantation from zero
Before I start tinkering with adding a Site Health check to PLU Redux, I got a wild hair and made a userscript to hide the welcome box on `make.wordpress.org` sites: