@selfcommunity/utils
Version:
Utilities to integrate a Community.
43 lines (42 loc) • 1.59 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.isClientSideRendering = exports.getHighestSafeWindowContext = exports.getWindowHeight = exports.getWindowWidth = void 0;
function getWindowWidth() {
return typeof global.window !== 'undefined' ? global.window.innerWidth : 0;
}
exports.getWindowWidth = getWindowWidth;
function getWindowHeight() {
return typeof global.window !== 'undefined' ? global.window.innerHeight : 0;
}
exports.getWindowHeight = getWindowHeight;
const isCrossOriginFrame = () => {
try {
return global.window.location.hostname !== global.window.parent.location.hostname;
}
catch (e) {
return true;
}
};
// Get the highest window context that isn't cross-origin
// (When in an iframe)
function getHighestSafeWindowContext(self = global.window.self) {
// If we reached the top level, return self
if (self === global.window.top) {
return self;
}
// If parent is the same origin, we can move up one context
// Reference: https://stackoverflow.com/a/21965342/1601953
if (!isCrossOriginFrame()) {
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
return getHighestSafeWindowContext(self.parent);
}
// If a different origin, we consider the current level
// as the top reachable one
return self;
}
exports.getHighestSafeWindowContext = getHighestSafeWindowContext;
function isClientSideRendering() {
return typeof window !== 'undefined';
}
exports.isClientSideRendering = isClientSideRendering;
;