2013-05-06 15 views
5

Io uso partita di limitare il mio script di lavorare un solo dominio, ma cromo viene eseguito in tutti i campi. Ho provato @include e @match e dice "Accedi ai tuoi dati su tutti i siti web" quando provo a installarlo e lo esegue in tutti i siti web.Chrome incendi userscript su tutte le pagine nonostante @match e le impostazioni @include

Come posso limitare userscript a un dominio in chrome?

metadati è lo stesso di questa pagina: http://www.chromium.org/developers/design-documents/user-scripts

Voglio dire, è:

// @match http://*.google.com/* 
// @match http://www.google.com/* 
+0

Stai cercando di installare un file zip/crx o un file '.user.js'? –

+0

ho detto userscript quindi è .user.js – Leadri

+0

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. –

risposta

6

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:

ANSI plus match
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:

UTF plus match
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:

ANSI plus include
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.jsonmatches, 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.