For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.
교차 출처 iframe 녹화
세션 리플레이 브라우저 SDK는 교차 출처 <iframe> 요소 내부의 DOM 변경사항을 캡처하여 이를 부모 페이지의 리플레이 스트림에 병합할 수 있습니다. 상위 페이지와 각 하위 iframe 페이지 모두 crossOriginIframes.enabled: true를 사용하여 SDK를 로드해야 합니다.
이 문서에서는 구성, 개인정보 보호 동작, 제한 사항 및 문제 해결에 대해 설명합니다.
브라우저 SDK에만 해당
교차 출처 iframe 녹화는 세션 리플레이 브라우저 SDK 플러그인 및 세션 리플레이 독립형 SDK에 적용됩니다. 모바일 세션 리플레이 SDK는 이 기능을 지원하지 않습니다.
작동 방식
상위 페이지에서 교차 출처 iframe 녹화를 활성화하면 SDK는 다음을 수행합니다.
- DOM에 추가된
<iframe>요소를 감시합니다. postMessage을 통해 자식 프레임으로start및stop신호를 보냅니다.- 자식 rrweb 이벤트를 상위 재생 스트림으로 중계하여 재생 뷰어가 단일 세션에서 두 프레임을 모두 재구성할 수 있도록 합니다.
자식 SDK는 iframe 내에서 실행될 때 이를 감지하고 기록을 시작하기 전에 부모의 시작 신호를 기다립니다.
설정
캡처할 부모 페이지와 각 자식 iframe 페이지 모두에 세션 리플레이 SDK를 로드합니다.
상위 페이지
import * as sessionReplay from "@amplitude/session-replay-browser";
sessionReplay.init("API_KEY", {
deviceId: "DEVICE_ID",
sessionId: SESSION_ID,
sampleRate: 1,
crossOriginIframes: {
enabled: true,
coordinateChildren: true,
},
});
브라우저 SDK 플러그인을 사용하는 경우 동일한 옵션을 sessionReplay.plugin()에 전달하십시오.
import * as amplitude from "@amplitude/analytics-browser";
import { sessionReplayPlugin } from "@amplitude/plugin-session-replay-browser";
const replay = sessionReplayPlugin({
crossOriginIframes: {
enabled: true,
coordinateChildren: true,
},
});
amplitude.add(replay);
amplitude.init("API_KEY", { deviceId: "DEVICE_ID" });
자식 iframe 페이지
상위 항목과 동일한 apiKey, deviceId 및 sessionId를 사용하여 SDK를 초기화하십시오. 교차 출처 iframe을 활성화하되, 자식에 coordinateChildren를 설정하지 마십시오:
import * as sessionReplay from "@amplitude/session-replay-browser";
sessionReplay.init("API_KEY", {
deviceId: "DEVICE_ID",
sessionId: SESSION_ID,
sampleRate: 1,
crossOriginIframes: { enabled: true },
});
iframe src을 설정할 때 iframe URL 쿼리 문자열을 통해 sessionId 및 deviceId를 자식에게 전달하십시오.
구성 옵션
| 옵션 | 유형 | 기본값 | 설명 |
|---|---|---|---|
crossOriginIframes.enabled | boolean | false | 페이지에서 원본 간 iframe 기록을 활성화합니다. 상위 페이지와 하위 페이지 모두에서 true로 설정합니다. |
crossOriginIframes.coordinateChildren | boolean | true | true인 경우 상위 SDK는 하위 iframe에 시작/중지 신호를 전송하고 해당 레코딩 생애주기 분석을 동기화된 상태로 유지합니다. 하위 녹화를 직접 관리하려면 false로 설정합니다. 상위 페이지에만 적용됩니다. |
개인정보 보호
하위 페이지의 rrweb 인스턴스는 자체 DOM 직렬화를 수행합니다. 상위의 개인정보 보호 설정(마스크 수준, 블록 선택기 등)은 iframe 내에 자동으로 적용되지 않습니다. 각 하위 페이지에서 개인정보 보호 설정을 개별적으로 구성하십시오.
제한 사항
- 타사 iframe(예: Stripe, Google 지도 또는 YouTube)은 캡처할 수 없습니다. 세션 리플레이 SDK를 설치하는 페이지만 제어할 수 있습니다.
coordinateChildren: false부모 코디네이터에서 제외됩니다. 이 모드에서는 사용자가 생애주기 분석을 직접 관리할 때까지 하위 SDK가 기록을 시작하지 않습니다.- 동일 출처 iframe은 교차 출처 설정이 필요하지 않지만, 두 페이지 모두에서
crossOriginIframes를 활성화해도 여전히 작동합니다.
설정 유효성 검사
- 상위 페이지와 각 하위 페이지가
crossOriginIframes.enabled: true를 사용하여 세션 리플레이 SDK를 로드하는지 확인합니다. - 두 페이지에서 동일한
apiKey,deviceId및sessionId을 사용하십시오. - 상위 SDK가 초기화된 후 하위 iframe을 추가하거나 탐색합니다.
- iframe 내에서 상호작용한 다음 Amplitude의 리플레이 뷰어에서 세션을 엽니다.
로컬 교차 출처 테스트의 경우 다른 출처(다른 포트 또는 호스트 이름)에서 상위 및 하위 페이지를 제공하십시오. 공용 HTTPS 부모는 혼합 콘텐츠와 브라우저의 로컬 네트워크 액세스 제한으로 인해 http://localhost 자식을 포함할 수 없습니다.
문제 해결
라이브 페이지에서 iframe이 비어 있습니다.
| 증상 | 가능한 원인 |
|---|---|
| 공용 부모의 빈 iframe | 하위 URL이 http://localhost 또는 다른 차단된 출처를 사용합니다. 공용 HTTPS를 통해 하위 요소를 제공하십시오. |
| "연결을 거부했습니다." | 하위 URL이 잘못되었거나 연결할 수 없습니다. iframe src을 확인하고 하위 출처가 삽입을 허용하는지 확인하십시오. |
| 플레이스홀더만 해당 | 상위 요소가 아직 iframe을 삽입하지 않았습니다. SDK가 초기화된 후 앱에 iframe을 추가하십시오. |
| 재생에서 빈 iframe | 하위 페이지에서 세션 리플레이를 로드하지 않습니다(예: 정적 데모 페이지). crossOriginIframes.enabled: true를 사용하여 하위 요소에 SDK를 설치합니다. |
재생 뷰어에서 iframe이 비어 있습니다.
| 증상 | 가능한 원인 |
|---|---|
| 짧은 세션이 비어 있음 | 첫 번째 자식 병합은 iframe 주입 후 약 1초 후에 도착할 수 있습니다. 더 긴 세션을 기록하고 iframe 내에서 상호 작용하십시오. |
| 스타일이 없거나 대비가 낮음 | CSS가 제대로 재생되지 않았습니다 — DOM이 누락된 것은 아닙니다. 외부 스타일시트를 확인하고, <link rel="stylesheet">에 crossorigin="anonymous"을 추가하고, CORS에서 app.amplitude.com을 허용하십시오. Replay 시 CSS 스타일링이 나타나지 않음(으)로 이동하십시오. |
| 콘텐츠가 없는 iframe 셸 | 자식 DOM은 증분을 통해 병합되었지만 나중에 체크아웃 스냅샷에서 iframe 자식을 생략할 수 있습니다. 원시 이벤트에서 캡처가 올바르게 보이지만 리플레이에 빈 프레임이 표시되는 경우 세션 리플레이 ID와 함께 Amplitude 서포트에 문의하십시오. |
관련 문서
이 내용이 도움이 되었나요?