web-dev-qa-db-fra.com

Quelle est la différence entre @include et @match dans les scripts utilisateur?

La page GreaseSpot sur les blocs de métadonnées dit que les deux sont très similaires mais @match "définit des règles plus strictes sur ce que le * signifie. "GreaseSpot passe ensuite à teach en utilisant @include, mais Chrome des exemples comme this semblent généralement utiliser @match et indiquer que @include n'est pris en charge qu'à des fins de compatibilité; @match est préféré.

Apparemment , @include google.* peut s'exécuter sur google.evil.com pendant que @match google.* ne peux pas.
Cet exemple n'est pas suffisant pour vraiment voir comment les caractères génériques se comportent différemment entre ces deux, et de meilleures explications sont recherchées dans les réponses ici.

Les nouveaux scripts GreaseMonkey (Firefox) utilisent @include par défaut alors que les nouveaux scripts TamperMonkey (par exemple Chrome) utilisent @match par défaut.

Quelles sont exactement les différences entre ces deux?

Par exemple, comment chacun gère-t-il les caractères génériques?
Existe-t-il des différences de compatibilité entre les navigateurs?
Quelles raisons aurait quelqu'un pour choisir d'utiliser l'un plutôt que l'autre?

32
WBT

Vous ne pouvez pas utiliser d'expressions régulières avec @match, tandis que vous pouvez avec @include.

Cependant, @include donnera à vos utilisateurs des avertissements de sécurité plus effrayants concernant le script s'appliquant à tous les sites.

C'est même si une expression @include vous permet d'être plus restrictif sur les sites auxquels un script s'applique (par exemple en spécifiant qu'une partie d'une URL doit être numérique en utilisant le fragment d'expression régulière "[0-9] +", ou en utilisant "^ https?: //" pour appliquer à un script uniquement ces deux schémas, au lieu de l'opérateur de globalisation non-regex plus général * utilisé pour chacun de ces cas dans @match, ce qui entraîne une application plus large du script).

19
WBT