Javascript 动态广告代码替换页面

Javascript 动态广告代码替换页面,javascript,ajax,javascript-events,jquery,Javascript,Ajax,Javascript Events,Jquery,我有一个使用移动广告提供商的应用程序;广告提供商的工作方式是,我在服务器端发出请求,提供商返回我的标记,我将其包含在我的网站上 为了加快加载页面的速度(这是我无法控制的要求),我对服务器进行了AJAX调用,然后服务器端进行调用,返回标记,并将标记包含在我的移动视图中 大多数时候,我收到的标记是或类似的东西 但是,当我收到一个带有的广告标记并动态调用以接收该广告时,我从动态加载的收到的标记最终会替换整个视图;只留下广告给我 我已经尝试了一些方法,但到目前为止还没有成功。我能做些什么来确保动态接收的

我有一个使用移动广告提供商的应用程序;广告提供商的工作方式是,我在服务器端发出请求,提供商返回我的标记,我将其包含在我的网站上

为了加快加载页面的速度(这是我无法控制的要求),我对服务器进行了AJAX调用,然后服务器端进行调用,返回标记,并将标记包含在我的移动视图中

大多数时候,我收到的标记是
或类似的东西

但是,当我收到一个带有
的广告标记并动态调用以接收该广告时,我从动态加载的
收到的标记最终会替换整个视图;只留下广告给我


我已经尝试了一些方法,但到目前为止还没有成功。我能做些什么来确保动态接收的标记不会最终替换整个页面内容

简单解决方案-将广告放入DIV或IFRAME(丑陋的方式)

真正的解决方案-更改广告系统或与他们达成协议以扩展API。无论以这种方式进行集成多么容易,从长远来看,您所做的令人讨厌的事情都会花费您大量的支持成本

如果移动广告系统做这样的事情-他们一定对资源有限的移动设备的开发一无所知。

ajax('POST','http://mobileAdProvider/,requestPayload,function(){insertHtmlAndScript(“someDivID”);})

ajax('GET','http://mobileAdProvider/queryString“,”,function(){insertHtmlAndScript(“someDivID”);})


问题可能是因为广告使用
document.write
作为输出

文档。write是盲目依赖的 在时间上。如果调用document.write 在onload事件之前,它附加或 在页面中插入文本。如果是 加载后称为,完全 替换页面,销毁什么 之前来过

您可以做的是临时覆盖document.write方法。就这么简单:

// 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;
//覆盖文档。使用自定义函数编写
var old=document.write;
document.write=函数(html){
document.getElementById(“目标”).innerHTML+=html;
};
//广告代码在这里,呼叫
//我们的document.write沙盒
文件、文字(“广告”);
//还原标准文档.write
document.write=old;

您可以看到一些

我不能使用iFrame,因为广告没有正确的目标属性。广告已经放在一个DIV之间了。
// 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;