diff --git a/tracker/tracker/CHANGELOG.md b/tracker/tracker/CHANGELOG.md index 4ee13ee24..0208a8da7 100644 --- a/tracker/tracker/CHANGELOG.md +++ b/tracker/tracker/CHANGELOG.md @@ -4,6 +4,7 @@ - remove useless logs - added gzip compression to large messages - tune mouse thrashing detection +- fix iframe handling # 6.0.0 diff --git a/tracker/tracker/package.json b/tracker/tracker/package.json index 67ffa66ae..bf2c328df 100644 --- a/tracker/tracker/package.json +++ b/tracker/tracker/package.json @@ -1,7 +1,7 @@ { "name": "@openreplay/tracker", "description": "The OpenReplay tracker main package", - "version": "6.0.1", + "version": "6.0.1-beta.1", "keywords": [ "logging", "replay" diff --git a/tracker/tracker/src/main/app/observer/top_observer.ts b/tracker/tracker/src/main/app/observer/top_observer.ts index 7eb15c15b..6586694e2 100644 --- a/tracker/tracker/src/main/app/observer/top_observer.ts +++ b/tracker/tracker/src/main/app/observer/top_observer.ts @@ -8,7 +8,7 @@ import IFrameOffsets, { Offset } from './iframe_offsets.js' import { CreateDocument } from '../messages.gen.js' import App from '../index.js' -import { IN_BROWSER, hasOpenreplayAttribute } from '../../utils.js' +import { IN_BROWSER, hasOpenreplayAttribute, canAccessIframe } from '../../utils.js' export interface Options { captureIFrames: boolean @@ -75,6 +75,7 @@ export default class TopObserver extends Observer { //log return } + if (!canAccessIframe(iframe)) return const currentWin = iframe.contentWindow const currentDoc = iframe.contentDocument if (currentDoc && currentDoc !== doc) { diff --git a/tracker/tracker/src/main/utils.ts b/tracker/tracker/src/main/utils.ts index 739821ea9..b45707dbb 100644 --- a/tracker/tracker/src/main/utils.ts +++ b/tracker/tracker/src/main/utils.ts @@ -81,3 +81,19 @@ export function hasOpenreplayAttribute(e: Element, attr: string): boolean { return false } + +export function isIframeCrossdomain(e: HTMLIFrameElement): boolean { + try { + return e.contentWindow?.location.href !== window.location.href + } catch (e) { + return true + } +} + +export function canAccessIframe(iframe: HTMLIFrameElement) { + try { + return Boolean(iframe.contentDocument) + } catch (e) { + return false + } +}