at.js 常見問題

關於Adobe Target at.js JavaScript資料庫的常見問題解答。

使用 at.js 或 mbox.js 各有何優點?

at.js程式庫會取代mbox.js。 不再支援mbox.js程式庫。 然而,對於大多數人來說,at.js 的優點多於 mbox.js。

除了眾多優點以外,at.js 還能改進 Web 實施的頁面載入時間、改進安全性,以及為單頁應用程式提供更好的實施選項。

下圖比較使用 mbox.js 或 at.js 的頁面載入效能。

如上圖所示,使用mbox.js時,頁面內容要等到Target呼叫完成後才會開始載入。 使用 at.js 時,頁面內容在 Target 呼叫起始時就開始載入,不會等到呼叫完成。

at.js 和 mbox.js 對頁面載入時間有何影響?

許多客戶和顧問都想要知道 at.js 和 mbox.js 對頁面載入時間的影響,尤其是在比較新使用者和再度訪問的使用者時。可惜,有關 at.js 或 mbox.js 如何影響頁面載入時間,由於每一個客戶的實施不同,很難測量和提出具體數字。

不過,如果頁面上存在訪客API,Target可更清楚了解at.js和mbox.js如何影響頁面載入時間。

注意

只有當使用全域 mbox 時,「訪客 API」和 at.js 或 mbox.js 才會影響頁面載入時間 (原因在於主體隱藏技術)。訪客 API 整合不影響地區 mbox。

以下小節說明新訪客和再度造訪的訪客的動作序列:

新訪客

  1. 訪客 API 會載入、剖析和執行。

  2. at.js / mbox.js 會載入、剖析和執行。

  3. 如果已啟用全域 mbox 自動建立,Target JavaScript 資料庫:

    • 實體化訪客物件。
    • Target程式庫會嘗試擷取Experience Cloud Visitor ID資料。
    • 由於此訪客是新訪客,因此訪客API會向demdex.net觸發跨網域請求。
    • 擷取Experience Cloud Visitor ID資料後,會引發Target要求。

再度訪問的訪客

  1. 訪客 API 會載入、剖析和執行。

  2. at.js / mbox.js 會載入、剖析和執行。

  3. 如果已啟用全域mbox自動建立,Target JavaScript程式庫:

    • 實體化訪客物件。
    • Target程式庫會嘗試擷取Experience Cloud Visitor ID資料。
    • 訪客 API 會從 Cookie 擷取資料。
    • 擷取Experience Cloud Visitor ID資料後,會引發Target要求。
注意

若為新訪客,當訪客API存在時,Target必須多次瀏覽連線,以確定Target請求包含Experience Cloud Visitor ID資料。 若為再度訪問的訪客,Target只會越線前往Target以擷取個人化內容。

從舊版 at.js 升級為版本 1.0.0 之後,為什麼我發現回應時間好像變慢了?

at.js 1.0.0 版本以及更新版本會平行觸發所有請求。舊版會依序執行請求,這表示請求會放入佇列中,而Target會等待第一個請求完成,再繼續處理下一個請求。

舊版 at.js 執行請求的方式易於發生所謂的「線頭阻塞」。在 at.js 1.0.0 以及更新版本中, 會切換至平行請求執行。Target

如果您檢查 at.js 0.9.1 的網路標籤瀑布圖,則會看到下一個 請求要等到上一個完成時才會開始。Target此序列與at.js 1.0.0及更新版本的不同,所有請求基本上都是同時開始。

從回應時間的角度,從數學上來說,這個序列可以這樣加總

  • at.js 0.9.1:所有Target要求的回應時間=要求回應時間的總和
  • at.js 1.0.0和更新版本:所有Target要求的回應時間=要求回應時間上限

at.js程式庫1.0.0版能更快完成請求。 此外,at.js 請求為非同步, 不會阻礙頁面呈現。Target即使請求需要數秒才能完成,您仍會看到呈現的頁面,在Target從Target邊緣收到回應之前,頁面只有部分空白。

我可以非同步載入Target程式庫嗎?

at.js 1.0.0版可讓您非同步載入Target程式庫。

若要非同步載入 at.js:

  • 建議的方法是透過Adobe Experience Platform中的標籤。

  • 您也可以在載入 at.js 的指令碼標記中新增 async 屬性,就能非同步載入 at.js。使用類似的:

    <script src="<URL to at.js>" async></script>
    
  • 您也可以使用此程式碼來非同步載入 at.js:

    var script = document.createElement('script'); 
    script.async = true; 
    script.src = "<URL to at.js>"; 
    document.head.appendChild(script);
    

非同步載入 at.js 可有效避免讓瀏覽器無法呈現;不過,此技術可能導致網頁上忽隱忽現。

您可以使用預先隱藏的程式碼片段來避免忽隱忽現情形,該片段會隱藏頁面(或指定部分),然後在at.js和全域要求載入後顯示。 您必須在載入 at.js 之前新增此程式碼片段。

如果您是透過非同步Adobe Experience Platform實作部署at.js,請務必在使用Adobe Experience Platform內嵌程式碼的實作Target之前,直接在頁面上包含預先隱藏的程式碼片段。

如果您是透過同步 DTM 實作部署 at.js,可透過頁面頂端觸發的頁面載入規則新增預先隱藏的程式碼片段。

如需詳細資訊,請參閱 at.js 處理忽隱忽現情況的方式

at.js與Adobe Experience Manager整合(Experience Manager)相容嗎?

Adobe Experience Manager 6.2 具有 FP-11577 (或更新版本) 現在支援 at.js 實施與其 Adobe Target Cloud Services 整合。

使用 at.js 時如何防止頁面載入忽隱忽現?

Target 提供幾個方法來防止頁面載入忽隱忽現: 如需詳細資訊,請參閱使用 at.js 防止忽隱忽現情形

at.js 的檔案大小多大?

at.js 檔案下載後大約 109 KB。不過,因為大部分伺服器會自動壓縮檔案,使檔案變小,at.js 在伺服器上壓縮 (使用 GZIP 或其他方法) 和當使用者造訪您的網站而載入時,大約是 34 KB。您安裝 at.js 的伺服器上的壓縮設定,就決定實際壓縮大小。

at.js 為何比 mbox.js 還大?

at.js 實作使用單一資料庫 (at.js),而 mbox.js 實作實際上使用兩個資料庫 (mbox.js 和 target.js)。所以,at.js 要同時與 mbox.js target.js 一起比較才公平。比較兩個版本的 gzip 大小,at.js 1.2 版是 34 KB,而 mbox.js 63 版是 26.2 KB。

at.js 較大,因為它執行的 DOM 剖析比 mbox.js 多很多。這有必要,因為 at.js 在 JSON 回應中是取得「原始」資料,必須轉換成有意義的資料。mbox.js使用document.write(),所有剖析均由瀏覽器完成。

儘管檔案較大,但我們的測試指出 at.js 的頁面載入比 mbox.js 更快。此外,從安全性角度來看,at.js較優秀,因為不會動態載入其他檔案,或使用document.write

at.js 中有 jQuery 嗎? 因為我的網站上已有 jQuery,我可以移除 at.js 的這部分嗎?

at.js目前使用部分jQuery,因此您會在at.js頂端看到MIT授權通知。 jQuery 不公開,不會干擾您在頁面上已有的 jQuery 程式庫 (可能是不同版本)。恕不支援移除 at.js 內的 jQuery 程式碼。

at.js 支援 Safari 和設為 x-only 的跨網域嗎?

否,如果跨網域設為x-only,且Safari已停用第三方Cookie,則mbox.js和at.js會設定已停用的Cookie,且不會對該特定用戶端的網域執行任何mbox要求。

為了支援 Safari 訪客,較好的 X-Domain 是「已停用」(僅設定第一方 Cookie) 或「已啟用」(在 Safari 上僅設定第一方 Cookie,而在其他瀏覽器上設定第一方和第三方 Cookie)。

我可以在單頁應用程式中使用Target可視化體驗撰寫器(VEC)嗎?

可以,若您使用at.js 2.x,便可針對SPA使用VEC。如需詳細資訊,請參閱單頁(SPA)可視化體驗撰寫器

我可以對at.js實作使用Adobe Experience Cloud除錯程式嗎?

是.您也可以使用 mboxTrace 以進行偵錯,或使用瀏覽器的開發人員工具以檢查網路請求,篩選「mbox」以隔離 mbox 呼叫。

對於 at.js,mbox 名稱中可以使用特殊字元嗎?

可以,與 mbox.js 相同。

為什麼在我的網頁上 mbox 不會觸發?

Target 客戶有時使用雲端型例項搭配 Target 進行測試或簡單的概念證明用途。這些網域和許多其他網域均屬於公用字尾清單

如果您使用這些網域,則現代瀏覽器不會儲存Cookie,除非您使用targetGlobalSettings()自訂cookieDomain設定。 如需詳細資訊,請參閱使用雲端型例項搭配 Target

使用 at.js 時,可以將 IP 位址用作 Cookie 網域嗎?

可以,只要您使用 at.js 1.2 版或更新版本。Adobe 不過,強烈建議您保持最新版本。

注意

如果您使用 at.js 1.2 版或更新版本,則不需要下列範例。

視您使用 targetGlobalSettings 的方式而定,在下載 at.js 之前,您可能需要另外修改程式碼。例如,假設您的 Target 實施在各種網站上需要稍微不同的設定,且您無法使用自訂 JavaScript 來動態定義這些設定,請在下載檔案之後和上傳至個別網站之前,手動完成這些自訂。

下列範例可讓您使用 targetGlobalSettings() at.js 函數,插入程式碼片段來支援 IP 位址:

此範例適用於單一 IP 位址:

if (window.location.hostname === '123.456.78.9') { 
    window.targetGlobalSettings = window.targetGlobalSettings || {}; 
    window.targetGlobalSettings.cookieDomain = window.location.hostname; 
}

此範例適用於 IP 位址範圍:

if (/^123\.456\.78\..*/g.test(window.location.hostname)) { 
    window.targetGlobalSettings = window.targetGlobalSettings || {}; 
    window.targetGlobalSettings.cookieDomain = window.location.hostname; 
}

為何會看到警告訊息,例如「動作缺少選取器」?

這些消息與at.js功能無關。 at.js 程式庫會嘗試報告 DOM 中找不到的任何事物。

如果您看到此警告訊息,以下為可能的根本原因:

  • 頁面是動態建置,且at.js找不到元素。

  • 頁面建置緩慢(因為網路速度緩慢),且at.js在DOM中找不到選取器。

  • actity所執行的頁面結構已變更。 如果您在可視化體驗撰寫器(VEC)中重新開啟活動,應會收到警告訊息。 更新活動,以便找到所有必要的元素。

  • 基礎頁面是單頁應用程式 (SPA)的一部分,或頁面包含的元素出現在頁面很下方,而at.js "selector輪詢機制"找不到這些元素。 提高 selectorsPollingTimeout 或許有用。如需詳細資訊,請參閱 targetGlobalSettings()

  • 任何點擊追蹤量度會嘗試將本身新增至每個頁面,而不論設定此量度的 URL。雖然無害,但此狀況會導致這些訊息大量出現。

    為了獲得最佳結果,請下載並使用最新版本的 at.js。如需詳細資訊,請參閱 at.js 版本詳細資料下載 at.js

Target伺服器呼叫的目標網域tt.omtrdc.net為何?

tt.omtrdc.net 是 Adobe 之 EDGE 網路的網域名稱,用來接收 Target 的所有伺服器呼叫。

at.js為何不一律使用HttpOnly和Secure Cookie旗標?

HttpOnly 只能透過伺服器端編碼來設定。TargetMbox 之類的 Cookie 是透過 JavaScript 編碼來建立與儲存,因此 無法使用 HttpOnly Cookie 旗標。TargetTarget 在啟用跨網域時,會對從伺服器端設定的第三方cookie使用設定HttpOnly。

Secure 只有在頁面是經由 HTTPS 來載入時,能透過 JavaScript 設定。如果頁面一開始是透過 HTTP 載入,JavaScript 無法設定此旗標。此外,如果使用Secure標幟,則Cookie僅可在HTTPS頁面上使用。 對於透過HTTPS載入的頁面,Target會設定Secure和SameSite=None屬性。

為確保Target可正確追蹤使用者,且由於Cookie是在用戶端產生,除了上述情況,Target不會使用任一標幟。

at.js 觸發網路要求的頻率為何?

Target 會在伺服器端執行其所有決策。這表示 at.js 會在每次頁面重新載入或叫用 at.js 公用 API 時,觸發網路要求。

在最好的情況下,我們能否期望使用者在隱藏、取代,和顯示內容方面,不會受到任何頁面載入上的可見影響?

at.js會嘗試在較長的期間內避免預先隱藏HTML BODY或其他DOM元素,但這取決於網路條件和活動設定。 at.js 提供的設定可用於自訂隱藏 CSS 樣式的 BODY 設定,如此一來您就可以僅預先隱藏頁面的某些部份,而不用隱藏整個 HTML BODY。期望是那些部分包含了必須「個人化」的 DOM 元素。

在使用者符合活動資格的一般情況下,事件的序列為何?

由於 at.js 要求為非同步 XMLHttpRequest,因此我們會執行下列步驟:

  1. 頁面載入。
  2. at.js 預先隱藏 HTML BODY。有可以預先隱藏特定容器,而非 HTML BODY 的設定。
  3. at.js 要求觸發。
  4. 收到Target回應後, Target會擷取CSS選取器。
  5. Target使用CSS選取器會建立STYLE標籤,以預先隱藏將自訂的DOM元素。
  6. 移除預先隱藏 STYLE 的 HTML BODY。
  7. Target 開始進行 DOM 元素的輪詢。
  8. 如果找到DOM元素,Target會套用DOM變更,並移除預先隱藏STYLE的元素。
  9. 如果找不到DOM元素,全域逾時會取消隱藏元素,以避免頁面損毀。

at.js最後取消隱藏活動正在變更的元素時,頁面內容完全載入和顯示的頻率為何?

考量到上述情況,at.js最後取消隱藏活動正在變更的元素時,頁面內容完全載入和顯示的頻率為何? 換句話說,除了活動內容外,頁面會完全顯示,而活動內容則會在其餘內容顯示後稍微顯示。

at.js 不會讓頁面無法呈現。使用者可能會注意到頁面上有些空白區域,代表由Target自訂的元素。 若要套用的內容並未包含許多遠端資產 (例如 SCRIPT 或 IMG),則所有內容皆應快速呈現。

完全快取的頁面會如何影響上述情況? 其餘頁面內容載入後,活動內容是否更有可能明顯可見?

如果快取的CDN靠近使用者位置,但不靠近Target邊緣,該使用者可能會看到某些延遲。 Target 邊緣分佈於全球各地,因此這大多數時候都不是問題。

是否可以顯示主圖影像,然後在短暫的延遲後進行更換?

考量到下列情況:

Target逾時為5秒。 使用者載入具有自訂主圖影像活動的頁面。at.js 傳送要求以確認是否有要套用的活動,但無初始回應。假設使用者看見主圖影像的一般內容,因為未從Target收到任何關於是否有相關聯活動的回應。 4秒後,Target會傳回包含活動內容的回應。

在此階段,是否可以顯示替代版本? 4 秒後,是否可以更換主圖影像且使用者會注意到此影像更換?

起初,主圖影像 DOM 元素會隱藏。收到來自Target的回應後,at.js會套用DOM變更,例如取代IMG並顯示自訂的主圖影像。

at.js 需要什麼 HTML doctype?

at.js 需要 HTML 5 doctype。

此語法為:

<!DOCTYPE html>

HTML 5 doctype 可確保頁面以標準模式載入。使用怪異模式載入時,會停用 at.js 所根據的某些 JS API。Target在怪異模式下, 會停用 at.js。

本頁內容