terriajs
Version:
Geospatial data visualization platform.
62 lines (51 loc) • 1.64 kB
JavaScript
;
const { TerriaErrorSeverity } = require("../Core/TerriaError");
var defined = require("terriajs-cesium/Source/Core/defined").default;
var updateApplicationOnMessageFromParentWindow = function (terria, window) {
var allowOrigin;
window.addEventListener(
"message",
async function (event) {
var origin = event.origin;
if (!defined(origin) && defined(event.originalEvent)) {
// For Chrome, the origin property is in the event.originalEvent object.
origin = event.originalEvent.origin;
}
if (
(!defined(allowOrigin) || origin !== allowOrigin) && // allowed origin in url hash parameter
event.source !== window.parent && // iframe parent
event.source !== window.opener
) {
// caller of window.open
return;
}
// receive allowOrigin
if (
(event.source === window.opener || event.source === window.parent) &&
event.data.allowOrigin
) {
allowOrigin = event.data.allowOrigin;
delete event.data.allowOrigin;
}
// Ignore react devtools
if (/^react-devtools/gi.test(event.data.source)) {
return;
}
(
await terria.updateFromStartData(
event.data,
"Start data from message from parent window",
TerriaErrorSeverity.Error
)
).raiseError(terria);
},
false
);
if (window.parent !== window) {
window.parent.postMessage("ready", "*");
}
if (window.opener) {
window.opener.postMessage("ready", "*");
}
};
module.exports = updateApplicationOnMessageFromParentWindow;