Do not fail when trying to find DE window with cross origin (#231)

* Do not fail when trying to find DE window with cross origin

* Fix lint errors
This commit is contained in:
Tanuj Mittal 2020-09-25 14:49:11 -07:00 committed by GitHub
parent dcc2036793
commit 70c7d84bdb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 18 deletions

View File

@ -49,17 +49,16 @@ export function sendCachedDataMessage<TResponseDataModel>(
export function sendMessage(data: any): void { export function sendMessage(data: any): void {
if (canSendMessage()) { if (canSendMessage()) {
const dataExplorerWindow = getDataExplorerWindow(window); // We try to find data explorer window first, then fallback to current window
if (dataExplorerWindow) { const portalChildWindow = getDataExplorerWindow(window) || window;
dataExplorerWindow.parent.postMessage( portalChildWindow.parent.postMessage(
{ {
signature: "pcIframe", signature: "pcIframe",
data: data data: data
}, },
dataExplorerWindow.document.referrer portalChildWindow.document.referrer
); );
} }
}
} }
export function canSendMessage(): boolean { export function canSendMessage(): boolean {

View File

@ -2,6 +2,8 @@ export const getDataExplorerWindow = (currentWindow: Window): Window | undefined
// Start with the current window and traverse up the parent hierarchy to find a window // Start with the current window and traverse up the parent hierarchy to find a window
// with `dataExplorerPlatform` property // with `dataExplorerPlatform` property
let dataExplorerWindow: Window | undefined = currentWindow; let dataExplorerWindow: Window | undefined = currentWindow;
try {
// TODO: Need to `any` here since the window imports Explorer which can't be in strict mode yet // TODO: Need to `any` here since the window imports Explorer which can't be in strict mode yet
// eslint-disable-next-line @typescript-eslint/no-explicit-any // eslint-disable-next-line @typescript-eslint/no-explicit-any
while (dataExplorerWindow && (dataExplorerWindow as any).dataExplorerPlatform === undefined) { while (dataExplorerWindow && (dataExplorerWindow as any).dataExplorerPlatform === undefined) {
@ -12,6 +14,10 @@ export const getDataExplorerWindow = (currentWindow: Window): Window | undefined
dataExplorerWindow = dataExplorerWindow.parent; dataExplorerWindow = dataExplorerWindow.parent;
} }
} }
} catch (error) {
// This can happen if we come across parent from a different origin
dataExplorerWindow = undefined;
}
return dataExplorerWindow; return dataExplorerWindow;
}; };