Ehilà! Sono un fornitore di finestre e spesso mi vengono poste alcune domande interessanti sul lato tecnico delle cose. Una domanda che si fa un bel po 'è: "Posso accedere al DOM dell'apri della finestra dalla finestra del bambino?" Ci immerciamo in questo argomento e vediamo cosa è cosa.
Prima di tutto, spieghiamo rapidamente cosa è il DOM. Il modello a oggetti documenti, o DOM in breve, è come una rappresentazione strutturata di tutti gli elementi su una pagina Web. Permette a JavaScript di interagire con questi elementi, modificando i loro stili, contenuti e così via. Ora, quando parliamo di un apri della finestra e di una finestra per bambini, di solito abbiamo a che fare con scenari in cui una pagina web ne avrà un'altra.
Immagina di essere su una pagina principale (apertura della finestra) e fai clic su un pulsante che apre una nuova scheda o finestra (la finestra figlio). La domanda è: la finestra del bambino può tornare indietro e scherzare con il DOM della pagina principale? Bene, la risposta non è un semplice sì o no.
Lo stesso - Politica di origine
La grande regola qui è la stessa politica di origine. Questa è una misura di sicurezza nei browser Web che impedisce a una pagina di accedere al DOM di un'altra pagina se hanno origini diverse. Un'origine è fondamentalmente una combinazione del protocollo (come HTTP o HTTPS), il dominio (ad es. Www.example.com) e il numero di porta.
Se l'apri della finestra e la finestra del bambino hanno la stessa origine, le cose diventano molto più flessibili. Ad esempio, se si apri una nuova finestra dal tuo sito Web, la finestra figlio può accedere al DOM della finestra aperta. Puoi usare ilWindow.openeroggetto in JavaScript per farlo. Ecco un semplice esempio:
// nella finestra figlio if (window.opener) {var openerDocument = window.opener.document; // Ora è possibile accedere agli elementi nel documento di Opener VAR SomeElement = OpenSerDocument.getElementById ('Some - ID'); if (someElement) {someElement.style.color = 'Red'; }}
Ma se le origini sono diverse, i browser bloccheranno l'accesso. Questo per impedire ai siti Web dannosi di rubare informazioni sensibili da altri siti. Ad esempio, se apri una finestra figlio dal tuo sito di commercio a un gateway di pagamento della terza parte, la finestra del gateway di pagamento non può accedere al DOM di E -Commerce Site.
Perché vorresti accedere al DOM dell'apri della finestra?
Come fornitore di finestre, posso pensare ad alcuni motivi per cui qualcuno potrebbe voler farlo. Supponiamo che tu abbia un catalogo del prodotto nella tua pagina principale e quando un utente fa clic su un prodotto, apre una finestra per bambini con informazioni più dettagliate. Potresti volere che la finestra del bambino aggiorni il DOM della pagina principale per mostrare che il prodotto è stato visualizzato o aggiungerlo a un elenco "recentemente visualizzato".
Un altro caso d'uso potrebbe essere in uno strumento di configurazione. Apri una finestra figlio per configurare un prodotto di apertura della finestra, come unInterruttore cieco motorizzato. Una volta che l'utente termina la configurazione nella finestra figlio, è possibile utilizzare l'accesso al DOM dell'apertura della finestra per aggiornare la pagina principale con le opzioni di configurazione selezionate.
Gestione della croce - situazioni di origine
Se è necessario accedere al DOM dell'apri della finestra in una situazione di origine incrociata, ci sono alcune soluzioni alternative. Un'opzione è quella di utilizzare l'API postMessage. Ciò consente a Windows con origini diverse di comunicare in modo sicuro.
L'idea di base è che una finestra può inviare un messaggio a un'altra finestra usando ilPostMessagemetodo e la finestra ricevente può ascoltare questi messaggi utilizzando ilWindow.AddeventListener ('Messaggio', callback)evento.
Ecco come funziona:
// nella finestra figlio var targetorigin = 'https://www.example.com'; finestra.opener.postMessage ("Alcuni dati dalla finestra figlio", targetorigin); // nella finestra Opener Window.AddeventListener ('Message', Function (event) {if (event.origin === 'https: // Child - Window - Domain.com') {Console.log ('Messaggio ricevuto:', event.data);}});
In questo modo, è possibile scambiare i dati tra le due finestre senza accedere direttamente al DOM, che è bloccato dalla stessa politica di origine.
Real - Esempi mondiali nel settore degli apri delle finestre
Parliamo di alcuni scenari mondiali reali nel business dell'apri delle finestre. Supponiamo di avere una pagina principale che elenca diversi tipi di apri delle finestre, come ilMotore elettronico da 45 mmEMotore di limite meccanico di precisione. Quando un utente fa clic su un motore per saperne di più, si apre una finestra figlio.
È possibile utilizzare l'accesso DOM (se possibile) per aggiornare il conteggio delle visualizzazioni della pagina principale per quel prodotto. Oppure, se la finestra figlio ha un pulsante "Aggiungi al carrello", è possibile utilizzare l'accesso per aggiornare l'icona del carrello nella pagina principale.


Se Cross - Origin è un problema, puoi comunque utilizzare l'API postMessage. Ad esempio, la finestra del bambino può inviare un messaggio alla pagina principale dicendo che un prodotto è stato aggiunto al carrello. La pagina principale può quindi aggiornare il conteggio dei carrelli e mostrare un messaggio di conferma.
La linea di fondo
Quindi, puoi accedere al DOM dell'apri della finestra dalla finestra del bambino? Dipende dalla stessa politica di origine. Se le origini sono uguali, puoi usare ilWindow.openerobiettare per accedere al DOM. In caso contrario, dovrai utilizzare l'API postMessage per comunicare tra le finestre.
Come fornitore di finestre, capire questi concetti può aiutarti a creare migliori esperienze utente sul tuo sito Web. Che si tratti di fornire informazioni più dettagliate sul prodotto o di razionalizzare il processo di acquisto, essere in grado di interagire tra diverse finestre può fare una grande differenza.
Se sei sul mercato per apri di finestre di alta qualità, motori o switch e vuoi sapere di più su come i nostri prodotti possono adattarsi ai tuoi progetti, ci piacerebbe fare una chiacchierata. Contattaci per iniziare una discussione sugli appalti e lavoriamo insieme per trovare le migliori soluzioni per le tue esigenze.
Riferimenti
- MDN Web Docs - Same - Politica di origine
- MDN Web Docs - Window.PostMessage ()
- W3Schools - Oggetto finestra JavaScript
