2015-08-04 23 views
18

GreaseSpot page on metadata blocks, ikisi çok benzer ancak @match "* karakterinin ne anlama geldiğine dair daha katı kurallar koyduğunu söylüyor." GreaseSpot daha sonra 'u @include kullanarak gerçekleştirir, ancak this gibi Chrome örnekleri genellikle @match'u kullanır ve @include'un yalnızca uyumluluk amacıyla desteklendiğini belirtir; @match tercih edilir. @match google.*, Apparently, @include google.*, google.evil.com adresinde çalışamaz.
Bu örnek, joker karakterlerin bu ikisi arasında nasıl farklı davrandığını görmek için yeterli değildir ve daha iyi açıklamalar burada cevap olarak aranır.@include ve userscripts'taki tutar arasındaki fark nedir?

Yeni GreaseMonkey komut dosyaları (Firefox) varsayılan olarak @include'u kullanır; yeni TamperMonkey komut dosyaları (örneğin, Chrome) varsayılan olarak @match'u kullanır.

Bu ikisi arasındaki farklar tam olarak nelerdir?

Örneğin, her biri joker karakterleri nasıl ele alır?
Çapraz tarayıcı uyumluluğunda farklılıklar var mı?
Birinin diğerini kullanmayı seçmesinin sebebi nedir?

+0

Sadece herkes gibi kullanın. Yıllardır bunu yapıyorum ve sorunlarım yok. – MortenMoulder

cevap

10

@include ile can numaralı telefonu kullanırken normal ifadeleri kullanamazsınız. Ancak, @include kullanıcılarınıza, tüm sitelere uygulanan komut dosyasıyla ilgili daha ciddi güvenlik uyarıları verecektir.

Bu (bir @include ifade Eğer bir komut dosyası için geçerlidir siteler hakkındadaha kısıtlayıcı olmaya izin verir halde örneğin, bir URL'ye o kısmı düzenli ifade fragman kullanılarak sayısal belirterek "[0-9] +", veya komut satırının daha geniş bir şekilde uygulanmasına neden olan, daha çok eşlenmemiş bir globbing operatörü yerine, daha genel olmayan regex globbing operatörü * yerine bir komut dosyasına başvurmak için "^ https?: //" komutunu kullanma .

+2

'@ match' joker karakterinin' include' joker karakterinden daha güvenli olduğu bir örnek [Tampermonkey forumu] 'nda bulunabilir (https://forum.tampermonkey.net/viewtopic.php?t=466): '@include http * : // *. biniok.net' http: //evil.de#biniok.net, 'http: // *. biniok.net' işlevine izin vermez. –

+0

@FranklinYu Bunun nedeni, '@ include' ifadesinin bir regex olarak yorumlanması değil ve bu özel regex açıkça evil.de # biniok.net 'e izin veriyor mu? '/ *' "sıfır veya daha fazla"/"karakter" anlamına gelir, "' "ifadesi ise" herhangi bir karakter "anlamına gelir. Bunu @include^https?: //.*biniok \ .net $ 'olarak değiştirmek onu güvenli hale getirecektir. – dkasak

+0

@dkasak '@include http *: // *. Biniok.net' globs olarak yorumlanır. Düzenli ifade olarak yorumlanmak için, '@include/http *: // *. Biniok.net/'olmalıdır. Ayrıca, @include/http *: // *. Biniok.net/'eşleşmiyor http://evil.de/#biniok.net; htt:/1biniok2net' veya 'httppppp: ////// xbiniokynet' gibi birşeyle eşleşir –