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 録画
Session Replay Browser SDKは、クロスオリジン<iframe>要素内のDOM変更をキャプチャし、それを親ページのリプレイストリームにマージすることができます。親ページと各子iframeページの両方が、crossOriginIframes.enabled: trueを使用してSDKを読み込む必要があります。
この資料では、設定、プライバシーの動作、制限事項、およびトラブルシューティングについて説明します。
Browser SDKのみ
クロスオリジンiframe録画が、Session Replay Browser SDKプラグインとSession Replay Standalone SDKに適用されます。Mobile Session Replay SDKはこの機能をサポートしていません。
仕組み
親ページでクロスオリジンの iframe 録画を有効にすると、SDK は:
- DOMに追加された
<iframe>要素を監視します。 postMessage経由でstart信号とstop信号を子フレームに送信します。- 子のrrwebイベントを親のリプレイストリームにリレーするため、リプレイビューアは単一のセッションから両方のフレームを再構築できます。
子SDKは、iframe内で実行されることを検出し、記録を開始する前に親からの開始信号を待ちます。
セットアップ
Session Replay SDKを親ページとキャプチャしたい各子iframeページの両方に読み込みます。
親ページ
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,
},
});
Browser 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 },
});
iframesrcを設定するときに、sessionIdおよびdeviceIdをiframe URLクエリ文字列を通して子に渡します。
設定オプション
| オプション | タイプ | デフォルト | 概要 |
|---|---|---|---|
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により、親ページと各子ページがSession Replay SDKを読み込むことを確認します。- 両方のページで同じ
apiKey、deviceId、およびsessionIdを使用してください。 - 親SDKの初期化後に、子のiframeを追加するか移動します。
- iframe内でやり取りし、Amplitudeのリプレイビューアでセッションを開きます。
ローカルクロスオリジンテストの場合、異なるオリジン(異なるポートまたはホスト名)から親と子にサービスを提供します。パブリックHTTPSの親は、混在コンテンツとブラウザーのローカルネットワークアクセス制限のため、http://localhost子を埋め込むことはできません。
トラブルシューティング
ライブページ内のiframeが空白になる
| 症状 | 考えられる原因 |
|---|---|
| パブリック親からの空白のiframe | 子URLがhttp://localhostまたは別のブロックされたオリジンを使用しています。パブリックHTTPS経由で子を配信してください。 |
| 「接続を拒否されました」 | 子URLが正しくないか、到達できません。iframesrcを確認し、子オリジンが埋め込みを許可していることを確認してください。 |
| プレースホルダのみ | 親はまだiframeを挿入していません。SDKの初期化後にアプリにiframeを追加してください。 |
| リプレイ中に空のiframeがあります | 子ページがセッションリプレイをロードしていません(静的なデモページなど)。crossOriginIframes.enabled: trueを使用して子にSDKをインストールしてください。 |
リプレイビューアでiframeが空白です
| 症状 | 考えられる原因 |
|---|---|
| 短いセッションは空のように見えます | 最初の子マージはiframeの挿入から1秒後に到着することがあります。より長いセッションを記録し、iframe内で対話してください。 |
| スタイルが欠落しているか、コントラストが低い | CSSは正しく再生されませんでした — DOMが欠落しているわけではありません。外部スタイルシートを確認し、<link rel="stylesheet">にcrossorigin="anonymous"を追加し、CORSでapp.amplitude.comを許可してください。CSSスタイル設定がリプレイに表示されないを参照してください。 |
| コンテンツのない iframe シェル | 子の DOM はインクリメンタルによってマージされましたが、後のチェックアウトスナップショットでは iframe 子が省略される場合があります。キャプチャが未処理のイベントで正しく見えるにもかかわらず、リプレイで空のフレームが表示される場合は、Amplitudeサポートにお問い合わせの上、セッションリプレイIDをお知らせください。 |
関連ドキュメント
Was this helpful?