SDK統合ガイドの事前非表示

Adobe Target個のパーソナライゼーションがページのミッドレンダリングを書き換えることに起因するビジュアルフリッカーを防ぐ、小さな同期JavaScript ライブラリ。 <head>の上部に1つのインライン <script> タグを追加すると、パーソナライズされたコンテンツの準備が整った後、またはセーフティタイマーが起動した後にのみ、ページが表示されます。

統合ステップ integration-steps

  1. バンドルをダウンロードします。

    Flicker Manager UIを使用してprehide.min.jsをダウンロードします。 ファイルはクライアントコードとガードタイムアウトで事前設定されているため、PrehideConfig ブロックは必要ありません。

  2. <head>の最上部にインラインで埋め込みます。

    インライン <script> タグ内にprehide.min.jsの内容を<head>の最初の子として直接貼り付けます。 インラインが推奨される理由については、​ インラインと外部を参照してください。

    code language-html
    <!-- 1. Prehide SDK: must be FIRST in <head> and BEFORE any Adobe SDK -->
    <script>
      // paste the contents of prehide.min.js here
    </script>
    
    <!-- 2. Then load Alloy.js OR at.js -->
    <script src="https://your-cdn/alloy.min.js"></script>
    
  3. (オプション)ランタイム設定ブロックを追加します。

    UIを介してダウンロードせずにバンドルをセルフホストする場合、またはSDKの選択肢を上書きする必要がある場合にのみ必要です。 事前非表示スクリプトの前にconfig ブロックを配置します。

    code language-html
    <script>
      window.PrehideConfig = {
        sdk: "alloy"            // or "atjs" (defaults to "alloy")
      };
    </script>
    <script> /* prehide.min.js inline contents */ </script>
    <script src="https://your-cdn/alloy.min.js"></script>
    
  4. (オプション)同意の電信送金。

    実装で同意管理プラットフォーム (CMP)を使用している場合は、同意状態がわかったら直ちにwindow.Prehide.setConsent(...)に電話します。 同意管理を参照してください。

  5. 検証:

    DevToolsを開き、最初のペイントの<head>に<style id="alloy-prehiding"> (またはat.jsのat-body-style)が表示され、SDKが終了すると削除されることを確認します。 コンソールでwindow.Prehide.getState()を実行して、ランタイム状態を調べます。

スクリプトを配置する場所 script-placement

IMPORTANT
Prehide SDKはAlloy/at.jsの前に実行する必要があります。 Alloyが最初に読み込まれた場合、ページはパーソナライズされていないコンテンツをレンダリングしてから再レンダリングします。 これが、このSDKが防ぐように設計された正確なフリッカーです。


SDKの事前非表示スクリプトタグにasyncまたはdeferを追加しないでください。 ブラウザーがページのレイアウトを開始する前に非表示ルールを挿入するには、同期実行が必要です。

「SDKを事前に非表示」は、後からクリーンアップするAdobe Target SDKよりも前に表示する必要があります。 読み込み順序は交渉不可能です:

<!doctype html>
<html>
<head>
  <!-- ① Prehide SDK FIRST. Inline. Synchronous. No async/defer. -->
  <script> /* prehide.min.js inline contents */ </script>

  <!-- ② Alloy or at.js loads next -->
  <script src="https://cdn.alloy.adobe.com/alloy.min.js"></script>

  <!-- ③ Then everything else: meta, css, third-party tags, ... -->
  <link rel="stylesheet" href="main.css">
</head>
<body> ... your page ... </body>
</html>

インラインと外部 inline-vs-external

prehide.min.jsを含めるには、次の2つの方法があります。

メソッド
例
メモ
インライン(推奨)
<script>/* full contents of prehide.min.js pasted directly into the page */</script>
ネットワークのラウンドトリップをゼロにする: SDKは、他の何かがレンダリングされる前に実行されます。
外部(インライン化が不可能な場合のみ)
<script src="/static/prehide.min.js"></script>
最初のレンダリングの前にブロッキングネットワークリクエストを導入します。 HTTP/2およびエッジキャッシュを使用する場合でも、これには通常30~80 ミリ秒のコストがかかります。

インラインが好まれる理由

TIP
HTML テンプレートの<script>...</script>内でバンドルを直接インライン化します。 小さく、インラインで、常に一番上にある、重要なCSS ブロックのように扱います。
  • レンダーブロッキングのフェッチがありません。 SDKの事前非表示の目的は、最初のレンダリングの​ 前 ​に非表示ルールを挿入することです。 外部<script src>は、まさにそのクリティカルウィンドウにネットワークのラウンドトリップを追加します。
  • 新しい障害モードはありません。 外部ファイルは、404、タイムアウト、または広告ブロッカーによってブロックされる可能性があります。 インラインコピーは使用できません。
  • バンドルは小さい(約6 KB)。 インライン化のコストは一般的なファビコンよりも低く、キャッシュのメリットは、最初のレンダリング時に余分なラウンドトリップを上回るほど大きくありません。
  • キャッシュフレンドリー: HTML レスポンスでインライン化すると、SDKは、既存のキャッシュ層(CDNまたはブラウザーのHTTP キャッシュ)によって、ドキュメントの残りの部分と共にキャッシュされます。
  • 顧客固有のバンドル: ダウンロードしたファイルには、ダウンロード時にクライアントコードが組み込まれています。 インライン化により、すべての訪問者が、追加のリクエストなしで正しいカスタマイズされたバンドルを受け取ることができます。

設定 configuration

SDKは、2つのソースから優先順に設定を受け付けます。 最初に使用可能な方を読み上げます。

ランタイム window.PrehideConfig (手動統合)

セルフホストまたは未変更のバンドルの場合は、事前非表示スクリプトを実行する前にconfig オブジェクトを宣言します。

<script>
  window.PrehideConfig = {
    sdk: "alloy"             // optional: "alloy" (default) or "atjs"
  };
</script>
フィールド
タイプ
必須
説明
sdk
"alloy"
"atjs"
×

SDKの選定 sdk-selection

Adobe Targetでは、Alloy (最新のWeb SDK)とat.js (クラシックライブラリ)の2つの配信SDKを提供しています。 パーソナライゼーションが完了すると、それぞれ​different <style>要素idを探し、削除してページを表示します。 Prehide SDKは、一致するidを挿入する必要があります。そうしないと、セーフティタイマーが起動するまでページは非表示のままになります。

sdk値
挿入されたスタイルタグ ID
削除者
使用するタイミング
"alloy" (デフォルト)
<style id="alloy-prehiding">
Alloy SDK on personalize-complete
このページでAlloy / Adobe Web SDKを読み込んでいます。
"atjs"
<style id="at-body-style">
personalize-complete上のat.js
このページでクラシック at.js ライブラリを読み込んでいます。
NOTE
at.js SDKの場合、バージョン 2.x以降のみがサポートされます。

設定方法

<!-- For at.js -->
<script>
  window.PrehideConfig = { sdk: "atjs" };
</script>
<script> /* prehide.min.js inline */ </script>
<script src="https://cdn.adobe.com/.../at.js"></script>
WARNING
一致しない警告。 at.jsの読み込み中にsdk: "alloy"を設定すると(またはその逆)、SDKで削除するprehide要素が見つからなくなります。 ガードタイマーは最終的にページを表示しますが、訪問者はより長い非表示ウィンドウを体験します。 読み込むライブラリに合わせて、常にsdkを設定してください。

不明または不足している値は"alloy"にフォールバックするため、既存のAlloy統合は設定を変更することなく引き続き機能します。

NOTE
  • 同意値はwindowに保存されません。 関数のみが公開されます。内部ステートはSDKに対して非公開のままです。
  • "out"から"in"への移行では、完全にレンダリングされたコンテンツを再非表示にすると視覚的に混乱が生じるため、ページを再表示しません。
  • setConsentは、1つのページビュー内で複数回呼び出すことができます。 各呼び出しは、前の状態を置き換えます。

Prehide SDKには、CMPと連携するための同意に応じたAPIが含まれています。 使用はオプションです。 setConsentが呼び出されない場合、SDKは標準の非同意統合のように動作します。

API サーフェス

// Single function call. Pass a status string.
window.Prehide.setConsent("pending");  // banner shown, awaiting decision
window.Prehide.setConsent("in");       // user accepted personalization
window.Prehide.setConsent("out");      // user declined personalization

// Read-only debug snapshot.
window.Prehide.getState();
// → { sdk, version, consentStatus, consentApiUsed,
//      rulesResolved, hasSelectorsToGuard, guardTimeout }

各ステータスの機能

呼び出し
ガードタイマーへの影響
非表示のコンテンツへの影響
setConsent("pending")
アクティブタイマーが消去されます。 同意が解決されるまで、安全性の再表示は行われません。
セレクターは無期限に非表示のままです。
setConsent("in")
クリアしてから、設定されたタイムアウトで再起動しました。 ルールがまだ解決されていない場合は、解決されるのを待ちます。
SDKがパーソナライズされるか、ガードタイマーが起動するまで、コンテンツは非表示のままです。
setConsent("out")
クリアされました。 このページはすぐに非表示になります。
ページがすぐに表示されます。 後で解決するルールは、not​でコンテンツを再非表示にします。
(呼び出されることはありません)
既定のタイマーは、設定済みの期間init()から実行されます。
SDKがパーソナライズされるか、ガードタイマーが起動するまで、コンテンツは非表示のままです。 (後方互換性のあるレガシーモード)

推奨パターン:明示的な保留段階

  1. CMPが同意UIを表示したら、すぐにsetConsent("pending")に電話します。 これにより、訪問者の意思決定中はページのセーフティタイマーが解除され、バナーの背後でパーソナライズされていないコンテンツが瞬く間に表示されるのを防ぎます。

    code language-js
    window.Prehide.setConsent("pending");
    
  2. 訪問者がパーソナライゼーションを受け入れたら、setConsent("in")に電話してください。 ガードタイマーが再起動し、Alloy/at.jsが引き継ぎ、パーソナライゼーションが適用されるとページが表示されます。

    code language-js
    window.Prehide.setConsent("in");
    
  3. 訪問者がパーソナライゼーションを辞退する場合は、setConsent("out")に電話してください。 ページがすぐに表示され、表示されたままになります。 後で解決するCDN ルールは、再非表示にしません。

    code language-js
    window.Prehide.setConsent("out");
    

例:OneTrust スタイルの統合

// Called once OneTrust has rendered its banner.
function onOneTrustReady() {
  // Pause the guard timer while the banner is visible.
  window.Prehide.setConsent("pending");

  OneTrust.OnConsentChanged(function (event) {
    if (event.consentedToTargeting) {
      window.Prehide.setConsent("in");
    } else {
      window.Prehide.setConsent("out");
    }
  });
}

例:TCF / IAB スタイル

// Optional: pause the guard while UI is up.
window.Prehide.setConsent("pending");

// Your CMP eventually emits the final TC string.
function onTcData(tcData) {
  const hasTargetConsent = /* derive from tcData */;
  window.Prehide.setConsent(hasTargetConsent ? "in" : "out");
}
recommendation-more-help
target-dev-help-dev