Tránh các lỗi triển khai phổ biến

Các trường hợp sau thể hiện một số lỗi phổ biến nhất được ghi nhận khi triển khai GPT. Mặc dù những cách triển khai như vậy có thể hoạt động tốt với của GPT, chúng tôi không đảm bảo rằng họ sẽ tiếp tục làm như vậy trong tương lai. Trong trong hầu hết các trường hợp nghiêm trọng nhất, những cách triển khai này có thể làm gián đoạn việc phân phát quảng cáo theo những cách khó đoán. Đây được coi là những cách triển khai không được hỗ trợ.

Mỗi tình huống bao gồm một phương pháp đề xuất để khắc phục vấn đề được nêu.

Xin lưu ý rằng danh sách này không phải là danh sách đầy đủ về các vấn đề tiềm ẩn, nhưng dự kiến sẽ đóng vai trò là một hướng dẫn hữu ích trong việc xác định các loại vấn đề có thể cần cần xử lý.

Hơn nữa, tuỳ thuộc vào việc triển khai của mình, bạn có thể cần phải tìm tất cả các vị trí mà bạn có thể cần những thay đổi như vậy trong trang web của bạn.

Lỗi thường gặp

Trường hợp 1: Sử dụng bản sao không chính thức của thư viện JavaScript GPT

Nội dung mô tả trường hợp sử dụng cấp cao Lưu trữ gpt.js, pubads_impl.js hoặc bất kỳ thư viện nào mà chúng tải từ máy chủ của bạn, hoặc tải các tệp này từ một nguồn không chính thức.
Ví dụ về đoạn mã có lỗi
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
Cách khắc phục lỗi được đề xuất
// Correct: Access these files from a Google domain
<script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" crossorigin="anonymous" async></script>
// Also correct, if using Limited Ads
<script src="https://pagead2.googlesyndication.com/tag/js/gpt.js" async></script>

Trường hợp 2: Dựa vào trình nghe thẻ tập lệnh gpt.js

Nội dung mô tả trường hợp sử dụng cấp cao Giả sử rằng API GPT đã sẵn sàng để được gọi khi tệp JavaScript gpt.js được tải không chính xác vì một số phần của API được cung cấp bởi pubads_impl.js. Sử dụng API theo bất kỳ cách nào (bao gồm cả khung) từ bên trong trình nghe sự kiện được đính kèm vào thẻ tập lệnh không chính xác.
Ví dụ về đoạn mã có lỗi
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = (useSSL ? 'https:' : 'http:') +
        '//www.googletagservices.com/tag/js/gpt.js';
// Incorrect: Attaching a callback to the script's onload event.
tag.onload = callback;
var node = document.getElementsByTagName('script')[0];
node.parentNode.insertBefore(tag, node);
Cách khắc phục lỗi được đề xuất
// Make sure that googletag.cmd exists.
window.googletag = window.googletag || {};
googletag.cmd = googletag.cmd || [];
// Correct: Queueing the callback on the command queue.
googletag.cmd.push(callback);
Giải thích / mô tả bản sửa lỗi googletag.cmd duy trì một danh sách các lệnh sẽ chạy ngay khi GPT đã sẵn sàng. Đây là cách đúng để đảm bảo lệnh gọi lại của bạn sẽ chạy khi GPT đã tải.

Trường hợp 3: Kiểm tra đối tượng googletag để biết liệu GPT đã sẵn sàng hay chưa

Nội dung mô tả trường hợp sử dụng cấp cao Vì API GPT có thể chưa sẵn sàng khi tệp JavaScript gpt.js được tải hoặc khi đối tượng googletag được xác định, sẽ kiểm tra đối tượng đó để xem liệu API GPT có sẵn không đáng tin cậy.
Ví dụ về đoạn mã có lỗi
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
 functionProcessingGPT();
}
Cách khắc phục lỗi được đề xuất
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
 functionProcessingGPT();
}
Giải thích / mô tả bản sửa lỗi GPT sẽ điền sẵn cờ boolean googletag.apiReady ngay khi API sẵn sàng được gọi để bạn có thể đưa ra các câu nhận định đáng tin cậy.

Tình huống 4: Dựa vào cú pháp mã bị làm rối

Nội dung mô tả trường hợp sử dụng cấp cao Nếu dựa vào cú pháp chính xác của mã thư viện GPT đã rút gọn, bạn sẽ gần như nhưng chắc chắn sẽ gặp phải tình trạng hỏng sản phẩm. Vui lòng chỉ sử dụng API nêu trong Hướng dẫn tham khảo API, vì chúng tôi liên tục thay đổi hoạt động nội bộ của GPT nhằm cải tiến liên tục.
Ví dụ: một yêu cầu phổ biến là phát hiện thời điểm PubAdsService được tải đầy đủ trong để gọi refresh().
Ví dụ về đoạn mã có lỗi
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
 functionProcessingGPT();
}
Cách khắc phục lỗi được đề xuất
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
 functionProcessingGPT();
}
Giải thích / mô tả bản sửa lỗi Hệ thống chỉ có thể sử dụng API công khai. Trong trường hợp phát hiện xem PubAdsService có Chúng ta có một giá trị boolean googletag.pubadsReady.

Trường hợp 5: Ghi đè hàm hoặc biến bất kỳ của GPT

Nội dung mô tả trường hợp sử dụng cấp cao Các trường hợp sử dụng dựa trên việc ghi đè bất kỳ hàm hoặc biến nào mà GPT sử dụng có thể bị hỏng bất cứ lúc nào vì đây không phải là trường hợp sử dụng được hỗ trợ. Việc thay đổi thời gian trong nội bộ GPT có thể hiển thị thông tin này loại hành vi không chính xác do sự cố gây gián đoạn.
Ví dụ về đoạn mã có lỗi
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
Cách khắc phục lỗi được đề xuất
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];

Trường hợp 6: Thứ tự lệnh gọi GPT không đúng

Nội dung mô tả trường hợp sử dụng cấp cao Tình huống tương tranh có thể gây ra sự cố khi các thành phần bên trong GPT phát triển. Không chính xác một tập hợp câu lệnh theo thứ tự mà hoạt động được do thời gian cụ thể trong quá trình thực thi có thể không còn hoạt động trong tương lai.
Ví dụ về đoạn mã có lỗi
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
Cách khắc phục lỗi được đề xuất
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
Giải thích / mô tả bản sửa lỗi Tránh tình trạng tương tranh bằng cách đảm bảo tôn trọng thời gian thông thường của GPT. Ví dụ hợp lệ các thứ tự từng phần bao gồm:
  • Xác định-Bật-Hiển thị
    1. Xác định chế độ cài đặt cấp trang
    2. Xác định ô
    3. enableServices()
    4. Vùng hiển thị
  • Bật tuỳ chọn Hiển thị Xác định
    1. Xác định chế độ cài đặt cấp trang
    2. enableServices()
    3. Xác định ô
    4. Vùng hiển thị

Trường hợp 7: Sử dụng sai mục đích việc đóng và phạm vi biến JavaScript

Nội dung mô tả trường hợp sử dụng cấp cao Giả định không chính xác về phạm vi biến JavaScript và giá trị của biến được ghi lại trong hàm được truyền đến googletag.cmd.push.
Ví dụ về đoạn mã có lỗi
// Incorrect: Variable x is declared outside the anonymous function
// but referenced within it.
for (var x = 0; x < slotCount; x++) {
 window.googletag.cmd.push(
  function(){
    // If GPT is not yet loaded, this code will be executed subsequently when
    // the command queue is processed. Every queued function will use the last value
    // assigned to x (most likely slotCount).
    // This is because the function closure captures the reference to x,
    // not the current value of x.
    window.googletag.display(slot[x]);
  })
 }
}
Cách khắc phục lỗi được đề xuất
window.googletag.cmd.push(
 function(){
  // Correct: We both declare and reference x inside the context of the function.
  for (var x = 0; x < slotCount; x++){
   window.googletag.display(slot[x]);
  }
 }
)
Giải thích / mô tả bản sửa lỗi

Trong JavaScript, hàm đóng thu thập các biến theo tham chiếu thay vì theo giá trị. Điều này có nghĩa là nếu một biến được chỉ định lại thì giá trị mới của biến đó sẽ được sử dụng khi hàm đóng gói được ghi lại thì sau đó sẽ được thực thi. Do đó, hành vi của mã trong trạng thái đóng có thể thay đổi tuỳ thuộc vào việc lệnh gọi lại được thực thi ngay lập tức hay bị trì hoãn.

Trong trường hợp GPT được tải không đồng bộ, tuỳ thuộc vào tốc độ GPT tải các lệnh gọi lại trên hàng đợi lệnh có thể thực thi ngay lập tức hoặc không. Trong phần trước ví dụ: điều này làm thay đổi hành vi của các lệnh được xếp hàng đợi.

Để tránh mọi vấn đề, bạn nên viết mã mà không giả định rằng hàm được đặt trên hàng đợi lệnh sẽ thực thi ngay lập tức và cần được chú ý liên quan đến quy tắc xác định phạm vi của JavaScript.

Trường hợp 8: Di chuyển vùng chứa vị trí trong DOM sau khi gọi màn hình hiển thị

Nội dung mô tả trường hợp sử dụng cấp cao Việc di chuyển hoặc chèn vùng chứa vị trí trong DOM sau khi gọi màn hình có thể dẫn đến chỉnh lại luồng không mong muốn và hành vi khó đoán trong GPT.
Ví dụ về đoạn mã có lỗi
// Incorrect: Moving slot containers after calling display
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");
...
// Inserting another element before the slot container, pushing the slot container down the page.
document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
Cách khắc phục lỗi được đề xuất
// Correct: Make any DOM order changes before calling display

document.body.insertBefore(someOtherElement, document.getElementById("div-gpt-ad-123456789-0"));
...
googletag.defineSlot("/1234/travel/asia", [728, 90], "div-gpt-ad-123456789-0");
googletag.enableServices();
googletag.display("div-gpt-ad-123456789-0");