From 550ea70c9cff66af1cf218fe0b80dbf90d179e6d Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Tue, 9 Jul 2019 18:27:27 +0800 Subject: [PATCH] Allowed auth-pages to update location from message refs #36 This will allow the members-browser-auth library to post messages to the auth-pages iframe, asking it to update the location from inside the frame. --- ghost/members-auth-pages/components/Pages.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/ghost/members-auth-pages/components/Pages.js b/ghost/members-auth-pages/components/Pages.js index 78beeddb02..18815f768b 100644 --- a/ghost/members-auth-pages/components/Pages.js +++ b/ghost/members-auth-pages/components/Pages.js @@ -5,6 +5,8 @@ export default class Pages extends Component { constructor(props) { super(props); this.state = this.getStateFromBrowser(); + this.parentOrigin = new URL(document.referrer).origin; + window.addEventListener('message', (event) => this.onReceiveMessage(event)); window.addEventListener("hashchange", () => this.onHashChange(), false); this.handleChange = props.onChange || (() => { }); } @@ -18,6 +20,15 @@ export default class Pages extends Component { }; } + onReceiveMessage(event) { + if (event.origin !== this.parentOrigin) { + return; + } + const {hash, query} = event.data; + const newHash = `${hash}?${query}`; + window.location.hash = newHash; + } + onHashChange() { this.setState(this.getStateFromBrowser()); this.handleChange();