В чем разница между @include и @match в userscripts?

на страница GreaseSpot на блоках метаданных говорит, что эти два очень похожи, но @match "устанавливает более строгие правила о том, что * символ означает."GreaseSpot затем переходит к научить используя @include, но примеры Chrome, такие как этой обычно, кажется, используют @match и свидетельствуют о том, что @include поддерживается только для совместимости; @match предпочтительнее.

видимо, @include google.* может работать на google.evil.com в то время как @match google.* не может.
Этого одного примера недостаточно, чтобы действительно увидеть, как подстановочные знаки ведут себя по-разному между этими двумя, и лучшие объяснения ищутся в ответах здесь.

новые скрипты GreaseMonkey (Firefox) использовать @include по умолчанию, в то время как новые сценарии TamperMonkey (например, Chrome) используют @match по умолчанию.

каковы именно различия между этими двумя?

например, как каждый из них обрабатывает подстановочные знаки?
Существуют ли различия в кросс-браузерной совместимости?
Какие причины у кого-то могут быть для выбора использования одного над другим?

1 ответов


вы не можете использовать регулярные выражения с @match, в то время как вы can С @include.

однако @include даст вашим пользователям более страшные предупреждения безопасности о применении скрипта ко всем сайтам.

Это даже если выражение @include позволяет вам быть более строгим о сайтах, к которым применяется скрипт (например, указание, что часть URL-адреса должна быть числовой, используя фрагмент regex " [0-9]+" или используя "^https?: / / "применять к script только эти две схемы, а не более общий оператор глобирования без регулярных выражений*, используемый для каждого из этих случаев в @match, что заставляет скрипт применяться более широко).