Maison > interface Web > js tutoriel > Pourquoi `window.close()` et `self.close()` ne ferment-ils pas ma fenêtre Chrome ?

Pourquoi `window.close()` et `self.close()` ne ferment-ils pas ma fenêtre Chrome ?

Barbara Streisand
Libérer: 2024-12-14 19:01:14
original
155 Les gens l'ont consulté

Why Won't `window.close()` and `self.close()` Close My Chrome Window?

"window.close et self.close Ne fermez pas la fenêtre dans Chrome : une explication et une solution complètes"

Contrairement à la croyance populaire, JavaScript est en effet capable de fermer les fenêtres créées par des scripts, même dans Chrome. Cette mesure de sécurité, introduite pour empêcher les activités malveillantes, empêche JavaScript de fermer des fenêtres qui ne sont pas créées par le même script.

La racine du problème

Selon la spécification window.close(), un Le navigateur peut choisir de fermer une fenêtre si les conditions suivantes sont remplies :

  1. Le contexte de navigation doit être « fermable par script », ce qui signifie qu'il a été créé par un script ou qu'il ne contient qu'un seul document. son historique de session.
  2. Le contexte de navigation du script historique doit être familier avec le contexte de navigation cible.
  3. Le contexte de navigation du script historique doit être autorisé à naviguer dans le contexte de navigation cible.

Restriction Firefox

Firefox applique strictement la condition selon laquelle JavaScript ne peut fermer que les fenêtres ouvertes par le même scénario. Toute tentative de fermeture d'une fenêtre qui ne répond pas à ce critère entraînera le message d'erreur : "Les scripts ne peuvent pas fermer les fenêtres qui n'ont pas été ouvertes par le script."

Exception de Chrome

Chrome autorise une exception à cette règle, permettant à JavaScript de fermer les fenêtres même si elles n'ont pas été créées par le même script. Cette exception ne s'applique toutefois pas aux scripts utilisateur.

Solutions de contournement

Chrome

  1. Exploit d'auto-redirection (obsolète) : Remplacez la page actuelle par elle-même puis fermez la fenêtre : open(location, '_self').close();. Cet exploit est désormais en grande partie bloqué.
  2. TamperMonkey Override (fonctionnalité limitée) : L'utilisation d'une directive // ​​@grant explicite et l'appel de window.close() peuvent fermer des onglets supplémentaires dans Chrome version 43 et ci-dessus.

Firefox

  1. Ajustement des paramètres de sécurité (non recommandé) : Désactivez la protection de sécurité en définissant allow_scripts_to_close_windows sur true dans à propos de :config. Notez que cela présente un risque de sécurité.

Solution à long terme

Pour une fermeture fiable de la fenêtre, envisagez de développer une extension Chrome ou un module complémentaire Firefox. Ces extensions peuvent fermer la fenêtre actuelle sans les limitations de JavaScript.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal