Hé! Ablaknyitó beszállítója vagyok, és gyakran felteszek néhány érdekes kérdést a dolgok technikai oldaláról. Az egyik kérdés, amely meglehetősen felmerül, az: "Hozzáférhetek az ablaknyitó domagációjához a gyermek ablakból?" Merüljünk bele ebbe a témába, és nézzük meg, mi az.
Először is, magyarázzuk el gyorsan, mi a DOM. A dokumentumobjektum -modell, vagy a DOM rövidre olyan, mint egy fák - strukturált ábrázolása az összes elemről egy weboldalon. Ez lehetővé teszi a JavaScript számára, hogy kölcsönhatásba lépjen ezekkel az elemekkel, megváltoztatja stílusát, tartalmát és így tovább. Most, amikor egy ablaknyitóról és egy gyermekablakról beszélünk, általában olyan forgatókönyvekkel foglalkozunk, ahol az egyik weboldal megnyílik a másikban.
Képzelje el, hogy a főoldalon (az ablaknyitó) vagy, és kattintson egy gombra, amely megnyitja az új lapot vagy ablakot (a gyermekablak). A kérdés az, hogy a gyermekablak visszatér -e és összezavarja -e a főoldal domóját? Nos, a válasz nem egyszerű igen vagy nem.
Ugyanaz - a származási politika
A nagy szabály itt ugyanaz - a származási politika. Ez egy biztonsági intézkedés a böngészőkben, amely korlátozza az oldal egy másik oldal DOM elérését, ha eltérő eredetűek. Az eredet alapvetően a protokoll (például a HTTP vagy a HTTPS), a domain (pl. Www.example.com) és a portszám kombinációja.
Ha az ablaknyitó és a gyermekablak azonos eredetű, akkor a dolgok sokkal rugalmasabbá válnak. Például, ha új ablakot nyit meg a saját weboldaláról, akkor a gyermekablak hozzáférhet a nyitó ablak DOM -jához. Használhatja aWindow.openerObjektum a JavaScript -ben, hogy ezt megtegye. Íme egy egyszerű példa:
// a gyermekablakban, ha (window.opener) {var OpenRDocument = window.opener.document; // Most hozzáférhet az Opener dokumentumában az elemekhez, var soyElement = openerDocument.getElementById ('Sow - ID'); if (someElement) {soyElement.style.Color = 'Red'; }}
De ha az eredet eltérő, a böngészők blokkolják a hozzáférést. Ennek célja annak megakadályozása, hogy a rosszindulatú webhelyek érzékeny információkat ellopjanak más webhelyekről. Például, ha megnyit egy gyermekablakot az E - Kereskedelmi webhelyről egy harmadik parti fizetési átjáróra, akkor a Pays Gateway ablaka nem fér hozzá az E -Kereskedelmi webhely DOM -jához.
Miért szeretne hozzáférni az ablaknyitó domagációjához?
Ablaknyitó beszállítójaként néhány okra gondolok, miért szeretné ezt megtenni. Tegyük fel, hogy van egy termékkatalógusod a főoldalon, és amikor a felhasználó egy termékre kattint, akkor ez egy gyermekablakot nyit meg részletesebb információkkal. Érdemes lehet, hogy a gyermek ablak frissítse a főoldal DOM -ját, hogy megmutassa, hogy a terméket megtekintették, vagy hozzáadják egy "nemrégiben megtekintett" listához.
Egy másik felhasználási eset lehet a konfigurációs eszközben. Nyisson egy gyermekablakot az ablaknyitó termék konfigurálásához, például aMotorizált vak kapcsoló- Miután a felhasználó befejezi a konfigurációt a gyermekablakban, felhasználhatja a hozzáférést az ablaknyitó DOM -jához, hogy frissítse a főoldalt a kiválasztott konfigurációs beállításokkal.
Kereszt kezelése - származási helyzetek
Ha kereszt -eredetű helyzetben hozzáférnie kell az ablaknyitó domagációjához, van néhány megoldás. Az egyik lehetőség a PostMessage API használata. Ez lehetővé teszi, hogy a különböző eredetű Windows biztonságos kommunikációt kapjon.
Az alapvető ötlet az, hogy az egyik ablak üzenetet küldhet a másik ablakba aposztmessagemódszer, és a fogadó ablak hallgathatja ezeket az üzeneteket awindow.addeventListener ('üzenet', visszahívás)esemény.
Így működik:
// a gyermek ablakban var TargetOrigin = 'https://www.example.com'; window.opener.postMessage („Néhány adatok a gyermek ablakból”, TargetOrigin); // az ablaknyitó ablakban.
Ilyen módon az adatokat cserélheti a két ablak között anélkül, hogy közvetlenül hozzáférne a DOM -hoz, amelyet ugyanazon - származási politika blokkol.
Valódi világpéldák az ablaknyitó üzletben
Beszéljünk néhány valós világ forgatókönyvéről az ablaknyitó üzletben. Tegyük fel, hogy van egy főoldala, amely felsorolja a különféle típusú ablaknyitókat, például a45 mm -es elektronikus motorésPrecíziós mechanikus határ motor- Amikor a felhasználó rákattint a motorra, hogy többet megtudjon, megnyílik egy gyermekablak.
Használhatja a DOM Access (ha lehetséges) a főoldal nézetszámának frissítéséhez. Vagy ha a gyermek ablaknak van egy "Hozzáadása a kosárhoz" gomb, akkor a hozzáféréssel frissítheti a kosár ikonját a főoldalon.


Ha a Cross - Origin egy probléma, akkor továbbra is használhatja a PostMessage API -t. Például a gyermek ablak üzenetet küldhet a főoldalra, mondván, hogy egy terméket adtak a kosárhoz. A főoldal ezután frissítheti a kosárszámot, és megmutathatja egy megerősítő üzenetet.
A lényeg
Szóval, hozzáférhet -e az ablaknyitó DOM -jához a gyermekablakból? Ugyanazon a származási politikától függ. Ha az eredet ugyanaz, akkor használhatja aWindow.openerObjektum a DOM eléréséhez. Ha nem, akkor a PostMessage API -t kell használnia az ablakok közötti kommunikációhoz.
Ablaknyitó beszállítójaként ezeknek a koncepcióknak a megértése segíthet jobb felhasználói élményeket létrehozni a webhelyén. Függetlenül attól, hogy részletesebb termékinformációkat nyújt, vagy a vásárlási folyamat ésszerűsítését, a különböző ablakok közötti kölcsönhatás nagy változást hozhat.
Ha a magas színvonalú ablaknyitók, motorok vagy kapcsolók piacán tartózkodik, és többet szeretne tudni arról, hogy termékeink hogyan illeszkedhetnek a projektekbe, szeretnénk beszélgetni. Keresse meg velünk a beszerzési vitát, és dolgozzunk együtt, hogy megtaláljuk az Ön igényeinek legjobb megoldásait.
Referenciák
- MDN webdokumentumok - Ugyanaz - Eredeti politika
- MDN webdokumentumok - Window.PostMessage ()
- W3Schools - JavaScript ablakobjektum
