2013-05-06 8 views
5

Używam matcha, aby ograniczyć działanie mojego skryptu tylko do jednej domeny, ale chrome uruchamia ją w każdej domenie. Próbowałem @include i @match i podczas próby instalacji zainstalowałem go na wszystkich stronach internetowych.Chrome userscript uruchamia się na wszystkich stronach pomimo użycia ustawień @match i @include.

Jak mogę ograniczyć usercript do jednej domeny w chrome?

metadanych jest taka sama jak tej strony: http://www.chromium.org/developers/design-documents/user-scripts

mam na myśli to:

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

Próbujesz zainstalować plik zip/crx lub plik ".user.js"? –

+0

Powiedziałem, że usercript to .user.js – Leadri

+0

Chrome konwertuje skrypty użytkownika do natywnych rozszerzeń Chrome z wzorcem dopasowania równoważnym '', a następnie ogranicza strony poprzez '" include_globs "'. Nie przejmuj się ostrzeżeniem, zachowuje się zgodnie z oczekiwaniami. Jeśli chcesz otrzymać mniej przerażające ostrzeżenie, musisz utworzyć rozszerzenie Chrome ze swojego skryptu użytkownika i edytować fragment "content_scripts" w pliku 'manifest.json'. Zobacz [tę odpowiedź] (http://stackoverflow.com/questions/11772308/keep-same-id-when- converting-from-userscript-in-chrome/11773654#11773654), aby uzyskać instrukcje generowania rozszerzenia Chrome z skrypt użytkownika. –

Odpowiedz

6

Uwaga: Ta odpowiedź opracowanej pomiędzy PO i Rob W. umieszczenie go tutaj w nadziei, że to pytanie może być użyteczne dla innych, bez konieczności przesiewania łańcucha komentarzy powyżej.


Istnieją dwie kwestie. Po pierwsze, a userscript header does not parse if a UTF8 BOM is present (błąd Chromium 102667).

Po drugie, podczas korzystania z @include versus @match w skrypcie user, Chrome błędnie zgłasza, że ​​skrypt może "uzyskać dostęp do danych we wszystkich witrynach", ale to nie jest prawda. Skrypt będzie działał tylko na tych stronach określonych przez instrukcje include.

Rozważmy (lub zrobić) Te trzy scenariusze:

Test UTF, nie UTF.user.js (zapis z kodowaniem 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+"!"); 


Test UTF , to plik UTF.user.js (z kodowaniem UTF-8, w tym BOM):

// ==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+"!"); 


Include, nie match.user.js (zapis z kodowaniem 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+"!"); 


pamiętać, że wszystkie 3 skrypty są tego samego kodu. Tylko @name i/lub format pliku i/lub @include w porównaniu do @match są różne.


Skrypt ANSI, z meczu (test UTF, nie UTF.user.js) Raporty te uprawnienia:

ANSI plus match
Ten skrypt działa poprawnie i raporty, a zgodnie z oczekiwaniami.


Skrypt UTF-8 z dopasowaniem (testem UTF , jest UTF.user.js) Raporty te uprawnienia:

UTF plus match
Uprawnienia podano błędnie, zaprzeczając oświadczenie (s) @match. Zwróć też uwagę, że nazwa pliku jest wyświetlana, zakodowana jako adres URL, zamiast dyrektywy @name. Są to zarówno wskazówki, że coś jest nie w porządku.

Gorzej, ten skrypt będzie działać na wszystkich stronach. Oznacza to, że na wszystkich stronach nienależących do Yahoo pojawi się alert(). Jest to wyraźnie a bug.


Skrypt ANSI, z include (Include, nie match.user.js) Raporty te uprawnienia:

ANSI plus include
Chociaż jest to raport mylące, skrypt będzie faktycznie działać poprawnie. Oznacza to, że będzie strzelał tylko dla stron yahoo.

Wynika to częściowo z tego, jak Chrome automatycznie konwertuje użytkowników na rozszerzenia. Instrukcje @match są tłumaczone bezpośrednio na właściwość manifest.json o numerze @include i są przekształcane w wartości. Zobacz Match patterns and globs. Klucz do raportów uprawnień znajduje się poza tablicą matches.

Powiązane problemy