Häufige Fehler bei der Implementierung vermeiden

Die folgenden Szenarien stellen einige der häufigsten Fehler dar, die bei der Implementierung von GPTs. Obwohl solche Implementierungen mit dem aktuellen Version von GPTs verwenden, können wir nicht garantieren, dass dies auch in Zukunft der Fall ist. Im Im schlimmsten Fall können solche Implementierungen zu unvorhersehbaren Problemen bei der Anzeigenbereitstellung führen. Sie gelten als nicht unterstützte Implementierungen.

Jedes Szenario enthält einen vorgeschlagenen Ansatz zur Behebung des dargestellten Problems.

Beachten Sie, dass diese Liste keine vollständige Liste potenzieller Probleme darstellt. soll aber als Orientierungshilfe bei der Identifizierung der Probleme dienen, berücksichtigt werden muss.

Abhängig von Ihrer Implementierung müssen Sie unter Umständen für Ihre Website erforderlich sein können.

Häufige Fehler

Szenario 1: Inoffizielle Kopien von GPT-JavaScript-Bibliotheken verwenden

Allgemeine Beschreibung des Anwendungsfalls Sie hosten gpt.js, pubads_impl.js oder Bibliotheken, die sie von Ihren eigenen Servern laden, oder und laden diese Dateien aus einer inoffiziellen Quelle.
Beispiel für ein Code-Snippet mit einem Fehler
// Incorrect: Accessing these files from an unofficial source
<script async src="https://www.example.com/tag/js/gpt.js"></script>
Vorschläge zur Fehlerbehebung
// 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>

Szenario 2: Verwendung von gpt.js-Skript-Tag-Listenern

Allgemeine Beschreibung des Anwendungsfalls Unter der Annahme, dass die GPT API zum Aufrufen bereit ist, wenn die JavaScript-Datei gpt.js ist falsch geladen, da einige Teile der API vom pubads_impl.js-Datei. In irgendeiner Weise auf die API setzen (einschließlich Frameworks) aus Ereignis-Listenern, die an das Skript-Tag angehängt sind, ist daher falsch.
Beispiel für ein Code-Snippet mit einem Fehler
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);
Vorschläge zur Fehlerbehebung
// 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);
Erläuterung / Beschreibung der Fehlerbehebung googletag.cmd verwaltet eine Liste von Befehlen, die ausgeführt werden, sobald GPT ausgeführt wird. ist bereit. Dies ist die korrekte Methode, um sicherzustellen, dass Ihr Callback ausgeführt wird, nachdem GPT geladen wurde.

Szenario 3: googletag-Objekt überprüfen, um festzustellen, ob GPT bereit ist

Allgemeine Beschreibung des Anwendungsfalls Da die GPT API möglicherweise noch nicht bereit ist, wenn die JavaScript-Datei gpt.js geladen wird, oder wenn das googletag-Objekt definiert ist, wird geprüft, ob die GPT API verfügbar ist, ist nicht zuverlässig.
Beispiel für ein Code-Snippet mit einem Fehler
// Incorrect: Relying on the presence of the googletag object
// as a check for the GPT API.
if (typeof googletag != 'undefined') {
 functionProcessingGPT();
}
Vorschläge zur Fehlerbehebung
// Correct: Relying on googletag.apiReady as a check for the GPT API.
if (window.googletag && googletag.apiReady) {
 functionProcessingGPT();
}
Erläuterung / Beschreibung der Fehlerbehebung GPT füllt das boolesche Flag aus googletag.apiReady aktualisieren, sobald kann die API aufgerufen werden, damit Sie zuverlässige Assertions erstellen können.

Szenario 4: Auf verschleierter Codesyntax basieren

Allgemeine Beschreibung des Anwendungsfalls Wenn Sie sich auf die genaue Syntax des komprimierten GPT-Bibliothekscodes verlassen, Probleme zu vermeiden. Bitte verwenden Sie nur die API, die im API-Referenzhandbuch dokumentiert ist, da wir kontinuierlich Änderungen vornehmen. der GPT-Innenfunktion für kontinuierliche Verbesserungen.
Eine gängige Anforderung besteht z. B. darin zu erkennen, wann PubAdsService vollständig geladen ist, um refresh() aufzurufen.
Beispiel für ein Code-Snippet mit einem Fehler
// Incorrect: Relying on an obfuscated property.
if (googletag.pubads().a != null) {
 functionProcessingGPT();
}
Vorschläge zur Fehlerbehebung
// Correct: Relying on public GPT API methods
// (i.e. googletag.pubadsReady in this case).
if(window.googletag && googletag.pubadsReady) {
 functionProcessingGPT();
}
Erläuterung / Beschreibung der Fehlerbehebung Es kann nur die öffentliche API verwendet werden. Wenn Sie herausfinden möchten, ob PubAdsService vollständig geladen, haben wir einen booleschen Wert googletag.pubadsReady ist nicht zulässig.

Szenario 5: Überschreiben einer Funktion oder Variable von GPT

Allgemeine Beschreibung des Anwendungsfalls Anwendungsfälle, die auf dem Überschreiben von Funktionen oder Variablen von GPTs basieren, können jederzeit fehlerhaft sein da dies kein unterstützter Anwendungsfall ist. Mögliche Ursachen: Änderungen am Timing der GPT-internen Elemente durch Brüche zustande gekommen sind.
Beispiel für ein Code-Snippet mit einem Fehler
// Incorrect: Haphazardly overwriting a googletag.* property.
googletag.cmd = [];
Vorschläge zur Fehlerbehebung
// Correct: Never overwrite googletag.* properties if they already exist.
// Always check before assigning to them.
googletag.cmd = googletag.cmd || [];

Szenario 6: Falsche Reihenfolge bei GPT-Aufrufen

Allgemeine Beschreibung des Anwendungsfalls Die Race-Bedingungen können zu Fehlern führen, wenn sich die internen Strukturen von GPTs weiterentwickeln. Ein falsch eine geordnete Reihe von Anweisungen, die aufgrund bestimmter Timings in der Ausführung funktionierten. möglicherweise in Zukunft nicht mehr betriebsbereit sind.
Beispiel für ein Code-Snippet mit einem Fehler
// Incorrect: Setting page-level key-value targeting after calling
// googletag.enableServices().
googletag.enableServices();
googletag.defineSlot(...);
googletag.pubads().setTargeting(e, a);
Vorschläge zur Fehlerbehebung
// Correct: Setting page-level key-value targeting before calling
// googletag.enableServices().
googletag.pubads().setTargeting(e, a);
googletag.defineSlot(...);
googletag.enableServices();
Erläuterung / Beschreibung der Fehlerbehebung Vermeiden Sie Race-Bedingungen, indem Sie darauf achten, das übliche Timing von GPT einzuhalten. Beispiel gültig Teilanordnungen umfassen: <ph type="x-smartling-placeholder">
    </ph>
  • Definieren-Aktivieren-Display <ph type="x-smartling-placeholder">
      </ph>
    1. Einstellungen auf Seitenebene festlegen
    2. Slots definieren
    3. enableServices()
    4. Anzeigeflächen
  • Display-Werbung aktivieren <ph type="x-smartling-placeholder">
      </ph>
    1. Einstellungen auf Seitenebene festlegen
    2. enableServices()
    3. Slots definieren
    4. Anzeigeflächen

Szenario 7: Falsche Verwendung von Schließungen und der Gültigkeit von JavaScript-Variablen

Allgemeine Beschreibung des Anwendungsfalls Falsche Annahmen zum Geltungsbereich von JavaScript-Variablen und zum Wert von Variablen in der Funktion erfasst, die an googletag.cmd.push übergeben wird.
Beispiel für ein Code-Snippet mit einem Fehler
// 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]);
  })
 }
}
Vorschläge zur Fehlerbehebung
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]);
  }
 }
)
Erläuterung / Beschreibung der Fehlerbehebung

In JavaScript erfassen Closures Variablen anhand von Referenzen und nicht nach Wert. Das bedeutet, Wenn eine Variable neu zugewiesen wird, wird ihr neuer Wert verwendet, wenn die Funktion die ihn erfasst hat, wird später ausgeführt. Das Verhalten des Codes in der Endung kann sich ändern, je nachdem, ob der Callback sofort oder verzögert ausgeführt wird.

Bei einem asynchron geladenen GPT hängt davon ab, wie schnell GPT Callbacks in der Befehlswarteschlange können sofort ausgeführt werden oder nicht. In der vorherigen ändert sich das Verhalten der Befehle in der Warteschlange.

Um Probleme zu vermeiden, sollte Code ohne die Annahme geschrieben werden, dass in der Befehlswarteschlange wird sofort ausgeführt. die Umfangsregeln von JavaScript.

Szenario 8: Slot-Container innerhalb des DOMs verschieben, nachdem „display“ aufgerufen wurde

Allgemeine Beschreibung des Anwendungsfalls Das Verschieben oder Einfügen von Slot-Containern im DOM nach dem Aufruf von display kann zu und unvorhersehbares Verhalten in den GPTs enthalten.
Beispiel für ein Code-Snippet mit einem Fehler
// 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"));
Vorschläge zur Fehlerbehebung
// 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");