Stránka nahrazující skript dynamické reklamy

Mám aplikaci, která využívá poskytovatele mobilních reklam; způsob, jakým poskytovatel reklamy funguje, je takový, že zašlu požadavek na straně serveru, poskytovatel mi vrátí přirážku a já ji přidám na svůj web.

Aby bylo načítání stránky rychlejší (což je požadavek, který nemám pod kontrolou), mám volání AJAX na svůj server, který pak zavolá na stranu serveru, vrátí označení a přidám označení na svůj mobil zobrazit.

Většinou je označení, které dostávám, <img> nebo něco podobného.

Když však obdržím označení reklamy s <script> které dynamicky provádějí další volání za účelem přijetí reklamy, označení, které obdržím z dynamicky načteného <script> skončí nahrazením celého pohledu; necháte se mnou jen reklamu.

Zkoušel jsem kolem toho pár věcí, ale zatím bez úspěchu. Mohu nějak zajistit, aby dynamicky přijímané označení nenahradilo celý obsah stránky?

Odpověď

Problém je pravděpodobně proto, že reklama používá document.write jako jeho výstup.

document.write je bezohledně závislý na načasování. Pokud je document.write zavolán před událostí onload, připojí nebo vloží text na stránku. Pokud se nazývá po načtení, zcela nahradí stránku , ničí to, co bylo předtím. – crockford.com

Co můžete udělat, je dočasně přepsat metoda document.write. Je to tak jednoduché:

// overwrite document.write with a custom function
var old = document.write;
document.write = function ( html ) {
  document.getElementById("target").innerHTML += html;
};

// ad code goes here, calling
// our document.write sandbox
document.write("<div> advertisement </div>"); 

// restore standard document.write
document.write = old;

Malé demo si můžete prohlédnout zde .