預先隱藏SDK整合指南
小型同步JavaScript程式庫,可防止Adobe Target個人化在轉譯器期間重寫頁面所導致的視覺閃爍。 在<head>頂端新增一個內嵌<script>標籤,且頁面只有在個人化內容準備就緒或安全計時器觸發後才會顯示。
整合步驟 integration-steps
-
下載套件組合。
使用Flicker Manager UI下載
prehide.min.js。 檔案已預先設定您的使用者端代碼和保護逾時,因此不需要PrehideConfig區塊。 -
在
<head>的最上方內嵌它。將
prehide.min.js的內容直接貼到內嵌<script>標籤中,做為<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> -
(選用)新增執行階段設定區塊。
只有在您自行託管套件組合而未透過UI下載時,或需要覆寫SDK選擇時,才需要使用此專案。 將設定區塊放在預先隱藏指令碼之前:
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> -
(選用)通知同意。
如果您的實作使用同意管理平台(CMP),請在知道同意狀態後立即呼叫
window.Prehide.setConsent(...)。 請參閱同意管理。 -
驗證。
開啟DevTools,並確認第一次繪圖時
<head>中出現<style id="alloy-prehiding">(或at.js的at-body-style),並在SDK完成後移除。 在主控台中執行window.Prehide.getState()以檢查執行階段狀態。
放置指令碼的位置 script-placement
請勿將
async或defer新增至預先隱藏SDK指令碼標籤。 需要同步執行,以便在瀏覽器開始佈局頁面之前插入隱藏規則。預先隱藏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的方式有兩種:
<script>/* full contents of prehide.min.js pasted directly into the page */</script><script src="/static/prehide.min.js"></script>為何偏好使用內嵌
<script>...</script>內巢狀件組合。 將其視為關鍵CSS區塊:小、內嵌,並一律位於最上方。- 沒有轉譯封鎖擷取。 預先隱藏SDK的目的是要在第一次轉譯前插入隱藏規則。 外部
<script src>會在該關鍵視窗中新增網路來回次數。 - 沒有新的失敗模式。 外部檔案可能為404、逾時或被廣告封鎖程式封鎖。 無法進行內嵌複製。
- 組合很小(~6 KB)。 內嵌成本比一般的Favicon還低,而且快取效益也不夠大,不足以超過初次轉譯時額外的往返次數。
- 適合快取。 在HTML回應中內聯時,現有快取層(CDN或瀏覽器HTTP快取)會將SDK與檔案的其餘部分一起快取。
- 客戶專屬套件。 下載的檔案在下載時已將您的使用者端代碼存入。 內嵌可確保每位訪客都能收到正確的自訂套件,不需要其他請求。
設定 configuration
SDK接受來自兩個來源的設定,依優先順序排列。 它會讀取最先提供的任何專案。
執行階段window.PrehideConfig (手動整合)
對於自行託管或未修改的組合,請在預先隱藏指令碼執行之前宣告設定物件:
<script>
window.PrehideConfig = {
sdk: "alloy" // optional: "alloy" (default) or "atjs"
};
</script>
sdk"alloy""atjs"SDK選取範圍 sdk-selection
Adobe Target提供兩種傳遞SDK: Alloy (現代的Web SDK)和at.js (傳統資料庫)。 個人化完成時,每個都會尋找不同的 <style>元素id,並將其移除以顯示頁面。 預先隱藏SDK必須插入相符的id;否則頁面會保持隱藏狀態,直到安全計時器觸發為止。
sdk值"alloy" (預設)<style id="alloy-prehiding">"atjs"<style id="at-body-style">如何設定
<!-- For at.js -->
<script>
window.PrehideConfig = { sdk: "atjs" };
</script>
<script> /* prehide.min.js inline */ </script>
<script src="https://cdn.adobe.com/.../at.js"></script>
sdk: "alloy" (反之亦然)表示SDK找不到要移除的預先隱藏專案。 防護計時器最終會顯示頁面,但訪客會體驗到較長的隱藏視窗。 一律設定sdk以符合您載入的程式庫。未知或遺失的值會回覆為"alloy",因此現有的Alloy整合可繼續運作,而不會變更任何組態。
同意管理 consent-management
- 同意值絕對不會儲存在
window上。 只會公開函式;內部狀態對SDK而言仍屬私有。 - 從
"out"到"in"的轉換不會重新隱藏頁面,因為重新隱藏完全演算的內容在視覺上可能會造成中斷。 - 可以在單一頁面檢視中多次呼叫
setConsent。 每個呼叫都會取代先前的狀態。
預先隱藏SDK包含同意感知的API,可與您的CMP協調。 使用它是選用的。 如果從未呼叫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")setConsent("out")init()執行設定的持續時間。建議的模式:明確的待定階段
-
當您的CMP顯示同意UI時,請呼叫
setConsent("pending")。 這樣會清除安全計時器,所以在訪客決定頁面時頁面會保持隱藏,以防止橫幅後面出現非個人化內容的閃爍。code language-js window.Prehide.setConsent("pending"); -
當訪客接受個人化時,請呼叫
setConsent("in")。 「保全」計時器會重新啟動,且Alloy/at.js會接管,在應用個人化後會顯示頁面。code language-js window.Prehide.setConsent("in"); -
當訪客拒絕個人化時,請致電
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");
}