Salut! Je suis un fournisseur d'ouvre-fenêtres, et on me pose souvent des questions intéressantes sur le côté technique des choses. Une question qui apparaît un peu est: "Puis-je accéder au DOM de l'ouvre-fenêtre depuis la fenêtre de l'enfant?" Plongeons dans ce sujet et voyons quoi.
Tout d'abord, expliquons rapidement ce qu'est le DOM. Le modèle d'objet de document, ou DOM pour faire court, est comme une représentation structurée d'arbre de tous les éléments sur une page Web. Il permet à JavaScript d'interagir avec ces éléments, en modifiant leurs styles, leur contenu, etc. Maintenant, lorsque nous parlons d'un ouvre-fenêtre et d'une fenêtre enfant, nous avons généralement affaire à des scénarios où une page Web en ouvre une autre.
Imaginez que vous êtes sur une page principale (l'ouvreur de fenêtre) et que vous cliquez sur un bouton qui ouvre un nouvel onglet ou une nouvelle fenêtre (la fenêtre enfant). La question est: la fenêtre de l'enfant peut-elle se remettre en arrière et jouer avec le dom de la page principale? Eh bien, la réponse n'est pas un simple oui ou non.
La même - politique d'origine
La grande règle ici est la même - politique d'origine. Il s'agit d'une mesure de sécurité dans les navigateurs Web qui empêche une page d'accéder au DOM d'une autre page s'ils ont des origines différentes. Une origine est essentiellement une combinaison du protocole (comme HTTP ou HTTPS), le domaine (par exemple, www.example.com) et le numéro de port.
Si l'ouvre-fenêtre et la fenêtre enfant ont la même origine, les choses deviennent beaucoup plus flexibles. Par exemple, si vous ouvrez une nouvelle fenêtre à partir de votre propre site Web, la fenêtre enfant peut accéder au dom de la fenêtre d'ouvre-premier. Vous pouvez utiliser lefenêtreObjet en JavaScript pour ce faire. Voici un exemple simple:
// dans la fenêtre enfant if (window.opener) {var openderDocument = window.opener.Document; // Vous pouvez maintenant accéder aux éléments dans le document de l'ouverture var someelement = openterDocument.getElementById ('Some - Id'); if (someElement) {someElement.style.color = 'red'; }}
Mais si les origines sont différentes, les navigateurs bloqueront l'accès. Il s'agit d'empêcher les sites Web malveillants de voler des informations sensibles à d'autres sites. Par exemple, si vous ouvrez une fenêtre enfant de votre site E - Commerce à une passerelle de paiement de la partie, la fenêtre de la passerelle de paiement ne peut pas accéder à DOM de votre site E - Commerce.
Pourquoi voudriez-vous accéder au DOM de l'ouvre-fenêtre?
En tant que fournisseur d'ouvre-fenêtres, je peux penser à quelques raisons pour lesquelles quelqu'un pourrait vouloir le faire. Supposons que vous ayez un catalogue de produits sur votre page principale, et lorsqu'un utilisateur clique sur un produit, il ouvre une fenêtre enfant avec des informations plus détaillées. Vous voudrez peut-être que la fenêtre enfant mette à jour le Dom de la page principale pour afficher que le produit a été visualisé ou pour l'ajouter à une liste "récemment consultée".
Un autre cas d'utilisation pourrait être dans un outil de configuration. Vous ouvrez une fenêtre enfant pour configurer un produit d'ouverture de fenêtre, comme unInterrupteur à aveugle motorisé. Une fois que l'utilisateur a terminé la configuration de la fenêtre Child, vous pouvez utiliser l'accès au DOM de l'ouvre-fenêtre pour mettre à jour la page principale avec les options de configuration sélectionnées.
Manipulation des situations d'origine croix
Si vous devez accéder au DOM de l'ouvre-fenêtre dans une situation d'origine croisée, il y a quelques solutions de contournement. Une option consiste à utiliser l'API PostMessage. Cela permet aux fenêtres avec des origines différentes de communiquer de manière sécurisée.
L'idée de base est qu'une fenêtre peut envoyer un message à une autre fenêtre en utilisant lepostmessageMéthode, et la fenêtre de réception peut écouter ces messages en utilisant lewindow.addeventListener ('message', rappel)événement.
Voici comment cela fonctionne:
// dans la fenêtre enfant var cibleRigin = 'https://www.example.com'; Window.Openner.PostMessage («certaines données de l'enfant Window», Targetorigin); // Dans la fenêtre de la fenêtre Fenêtre.AddeventListener ('message', fonction (événement) {if (event.origin === 'https: // child - window - domain.com') {console.log ('Message reçu:', event.data);}});
De cette façon, vous pouvez échanger des données entre les deux fenêtres sans accéder directement au DOM, qui est bloqué par la même politique d'origine.
Real - Exemples mondiaux dans l'entreprise ouvre-fenêtre
Parlons de certains scénarios réels - dans le monde de l'ouverture des fenêtres. Supposons que vous ayez une page principale qui répertorie différents types d'ouverture des fenêtres, comme leMoteur électronique de 45 mmetMoteur de limite mécanique de précision. Lorsqu'un utilisateur clique sur un moteur pour en savoir plus, une fenêtre enfant s'ouvre.
Vous pouvez utiliser l'accès DOM (si possible) pour mettre à jour le nombre de vues de la page principale pour ce produit. Ou, si la fenêtre enfant a un bouton "Ajouter au panier", vous pouvez utiliser l'accès pour mettre à jour l'icône de panier sur la page principale.


Si Cross - Origin est un problème, vous pouvez toujours utiliser l'API PostMessage. Par exemple, la fenêtre enfant peut envoyer un message à la page principale disant qu'un produit avait été ajouté au panier. La page principale peut ensuite mettre à jour le nombre de paniers et afficher un message de confirmation.
La ligne de fond
Alors, pouvez-vous accéder au DOM de l'ouvre-fenêtre à partir de la fenêtre enfant? Cela dépend de la même politique d'origine. Si les origines sont les mêmes, vous pouvez utiliser lefenêtreObjet pour accéder au dom. Sinon, vous devrez utiliser l'API PostMessage pour communiquer entre les fenêtres.
En tant que fournisseur d'ouverture de fenêtre, la compréhension de ces concepts peut vous aider à créer de meilleures expériences utilisateur sur votre site Web. Qu'il s'agisse de fournir des informations sur les produits plus détaillées ou de rationaliser le processus d'achat, pouvoir interagir entre différentes fenêtres peut faire une grande différence.
Si vous êtes sur le marché pour les ouvre-fenêtres de haute qualité, les moteurs ou les commutateurs, et que vous voulez en savoir plus sur la façon dont nos produits peuvent s'intégrer dans vos projets, nous serions ravis de discuter. Contactez-nous pour commencer une discussion sur les achats et travaillons ensemble pour trouver les meilleures solutions pour vos besoins.
Références
- Docs Web MDN - Même - Politique d'origine
- MDN Web Docs - Window.PostMessage ()
- W3Schools - Objet de fenêtre JavaScript
