Maison >interface Web >js tutoriel >Pourquoi `window.close()` et `self.close()` ne parviennent-ils pas à fermer Chrome Windows ?

Pourquoi `window.close()` et `self.close()` ne parviennent-ils pas à fermer Chrome Windows ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 03:43:10963parcourir

Why Do `window.close()` and `self.close()` Fail to Close Chrome Windows?

Window.close et Self.close Échec de la fermeture de Chrome Windows : une analyse complète

Invocation de window.close() ou self.close () dans le code JavaScript peut ne pas fermer la fenêtre dans Chrome. Cette divergence provient d'une idée fausse courante selon laquelle Chrome interdit aux scripts de fermer les fenêtres à moins qu'ils n'aient été créés par un script. Même si cela est faux, ces méthodes peuvent ne pas fonctionner comme prévu. Cet article examine les raisons sous-jacentes et explore les solutions potentielles.

Restrictions de sécurité

Les navigateurs modernes ont mis en œuvre des mesures de sécurité pour empêcher les scripts malveillants de fermer les fenêtres sans discernement. Conformément à la spécification window.close(), JavaScript n'est généralement pas autorisé à fermer une fenêtre qui n'a pas été créée par le même script. Cette restriction vise à limiter les exploits de sécurité et les désagréments pour les utilisateurs.

Mise en œuvre de Firefox

Firefox adhère strictement à ces directives de sécurité, interdisant explicitement aux scripts de fermer des fenêtres qui n'ont pas été ouvertes par scénario. Si un script Greasemonkey/Tampermonkey tente d'utiliser window.close() dans Firefox, il déclenchera le message d'erreur : "Les scripts ne peuvent pas fermer les fenêtres qui n'ont pas été ouvertes par le script."

Implémentation de Chrome

Chrome, en revanche, permet aux scripts de fermer des fenêtres qui n'ont pas été créées par un script. Cependant, cette exception ne s'étend pas aux contextes de script utilisateur comme Greasemonkey ou Tampermonkey. Les tentatives d'utilisation de window.close() à partir de ces contextes entraîneront un échec silencieux.

Solutions de contournement

Bien que les extensions Chrome et les modules complémentaires Firefox fournissent une solution fiable pour la fermeture Windows, il existe des solutions de contournement pirates pour l'utilisateur scripts :

Chrome :

  • Exploit d'auto-redirection : Cet exploit n'est plus efficace en général. Cependant, il peut toujours fonctionner avec du code injecté dans des onglets nouvellement ouverts sans historique de navigation.
  • Méthode @grant Window.Close : En utilisant la directive @grant dans les scripts Tampermonkey, il est possible de activer la fonctionnalité window.close(). Cependant, cela ne fonctionne que pour les onglets supplémentaires et non pour le dernier onglet restant.

Firefox :

  • Désactiver les paramètres de sécurité : Modifiez le paramètre about:config allow_scripts_to_close_windows sur true. Ceci n'est pas recommandé en raison de problèmes de sécurité.

Solution à long terme

L'approche la plus fiable consiste à créer une extension Chrome dédiée ou un module complémentaire Firefox. qui peut invoquer efficacement window.close(). Alternativement, les développeurs de scripts utilisateur pourraient envisager de soumettre une demande de fonctionnalité à Greasemonkey ou Tampermonkey pour la fonctionnalité intégrée de fermeture de fenêtre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn