Nota: questa risposta sviluppata tra OP e Rob W. Immissione qui nella speranza che questa domanda potrebbe essere utile ad altri senza dovendo setacciare la catena di commenti, sopra.
ci sono due questioni. Innanzitutto, a userscript header does not parse if a UTF8 BOM is present (bug bug Chromium 102667).
In secondo luogo, quando si utilizza @include
rispetto a @match
in un codice utente, Chrome riporta erroneamente che lo script può "Accedere ai dati su tutti i siti Web", ma questo non è proprio vero. Lo script verrà eseguito solo su quei siti specificati dalle istruzioni di inclusione.
Considerare (o fare) questi tre script:
prova UTF, non UTF.user.js (Salva con codifica ANSI):
// ==UserScript==
// @name Not UTF source file
// @match http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
alert ("This script should not run on "+location.hostname+"!");
prova UTF , è UTF.user.js (salva con codifica UTF-8, incluso il DB):
// ==UserScript==
// @name Is UTF source file
// @match http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
alert ("This script should not run on "+location.hostname+"!");
Includere, non match.user.js (Salva con codifica ANSI):
// ==UserScript==
// @name Use include, not match
// @include http://www.yahoo.com/*
// ==/UserScript==
if (location.hostname != 'www.yahoo.com')
alert ("This script should not run on "+location.hostname+"!");
Nota che tutti e 3 gli script sono lo stesso codice. Solo lo @name
e/o il formato file e/o @include
rispetto a @match
sono diversi.
Lo script ANSI, con la corrispondenza (test UTF, non UTF.user.js) riporta queste autorizzazioni:

Questo script funziona e le relazioni in modo corretto, e come previsto.
Lo script UTF-8, con corrispondenza (test UTF, è UTF.user.js) riporta queste autorizzazioni:

I permessi sono segnalati in modo non corretto, contraddicendo la @match
statement (s). Si noti inoltre che il nome file è mostrato, codificato con URL, invece della direttiva @name
. Questi sono entrambi indizi che qualcosa non va.
Peggio ancora, questo script funzionerà su tutti i siti. Cioè, vedrete il alert()
su tutte le pagine non Yahoo. Questo è chiaramente a bug.
Lo script ANSI, con include (includere, non match.user.js) riporta queste autorizzazioni:

Mentre questo è un rapporto fuorviante, lo script sarà effettivamente funzionare correttamente. Cioè, sparerà solo per le pagine di yahoo.
Ciò è dovuto in parte al modo in cui Chrome converte automaticamente gli script utente in estensioni. Le dichiarazioni @match
vengono convertite direttamente nella proprietà manifest.json
matches
, mentre le dichiarazioni @include
vengono convertite in valori include_globs
. Vedi Match patterns and globs. Le autorizzazioni segnalano le chiavi all'esterno dell'array matches
.
Stai cercando di installare un file zip/crx o un file '.user.js'? –
ho detto userscript quindi è .user.js – Leadri
Chrome converte gli script utente in estensioni native di Chrome con un pattern di corrispondenza equivalente a '', quindi limita le pagine tramite '" include_globs "'. Non preoccuparti dell'avvertimento, si comporta come ti aspetti. Se vuoi ricevere un avviso meno spaventoso, devi creare un'estensione per Chrome dal tuo script utente e modificare la parte "content_scripts" del file 'manifest.json'. Vedi [questa risposta] (http://stackoverflow.com/questions/11772308/keep-same-id-when-converting-from-userscript-in-chrome/11773654#11773654) per i passaggi per generare un'estensione di Chrome da un script utente. –