从javascript脚本重定向document.write

从javascript脚本重定向document.write,javascript,Javascript,我们希望在我们的网站上提供广告,但我们正在与之谈判的ads服务器在为我们提供足够快的广告方面存在问题 我所看到的问题是,我们应该包括一个,在那里我们想要显示广告,然后它将下载一个脚本并使用document.write插入一些html 问题是,对广告商网站的调用是slowish,返回的代码随后下载另一个文件(广告),这意味着在我们等待请求被填充时,呈现页面的速度变慢 是否有方法从document.write调用获取输出,并在页面加载后将其写入 基本上我想这样做: <html> <

我们希望在我们的网站上提供广告,但我们正在与之谈判的ads服务器在为我们提供足够快的广告方面存在问题

我所看到的问题是,我们应该包括一个
,在那里我们想要显示广告,然后它将下载一个脚本并使用document.write插入一些html

问题是,对广告商网站的调用是slowish,返回的代码随后下载另一个文件(广告),这意味着在我们等待请求被填充时,呈现页面的速度变慢

是否有方法从document.write调用获取输出,并在页面加载后将其写入

基本上我想这样做:

<html>
<body>

    <script>
function onLoad() {
    var urlToGetContentFrom = 'http://advertiserurl/myadvertkey';

    //  download js from above url somehow

    var advertHtml = // do something awesome to interprete document.write output
    $('someElement').innerHTML = advertHtml;
}
    </script>

</body>
</html>

函数onLoad(){
var urlToGetContentFrom=http://advertiserurl/myadvertkey';
//从上面的url下载js
var advertHtml=//做一些很棒的事情来解释document.write输出
$('someElement')。innerHTML=advertHtml;
}

或者任何类似的东西,让我获得该文件的输出并显示它。

要将主页加载与广告加载分离,您可以将广告放在iframe中它自己的页面中,或者类似地,使用AJAX下载脚本文件,并在它关闭时执行它。如果由于引用URI或其他原因,前者不足以满足需要,那么后者会给您一些灵活性:您可以使用字符串替换将“document.write”重写为其他内容,或者暂时将其替换为“document.write=custom_function;”,要捕获文档。请写入变量,而不是将其写入文档。实际上,您可以这样做:

var advertHtml = '';
var oldWrite = document.write;

document.write = function(str)
{
    advertHtml += str;
}

// Ad code here

// Put back the old function
document.write = oldWrite;

// Later...
...innerHTML = advertHtml;

不过,您仍然需要加载脚本文件。

由于同源策略,您在跨域时会遇到一些安全问题。如果您有权更改广告内容/服务,我会调查JSONP

您可能会感兴趣的是,哪个允许使用document.write after window.onload加载第三方脚本。在内部,该库重写document.write,动态附加DOM元素,运行任何包含的脚本,这些脚本也可能使用document.write


我已经准备好了

我们考虑过缓存调用的内容并提供服务,但是我们为每个请求提供了一个唯一的链接和图像,从而取消了这样做。我意识到这可能有点过分,但在每个请求中添加额外的.7秒会使每个页面的加载时间增加一倍。我不相信我能做到这一点,因为我无法编辑包含文档的外部脚本。在其中写入。你不需要编辑外部脚本-你可以在“//Ad代码”前后放置内容在不同的街区,你有一个好主意。我基本上改为:document.load=function(){var-adArea=$('ad');adArea.innerHtml=“”;}这似乎很有效。谢谢