我们希望在我们的网站上投放广告,但我们正在讨论的广告服务器在向我们提供足够快的广告方面存在问题。
我认为这个问题是我们应该包含一个<script src="http://advertiserurl/myadvertkey"></script>
,我们要在其中显示广告,然后下载脚本并使用document.write插入一些HTML。
问题是对广告客户网站的调用很慢并且返回的代码然后下载另一个文件(广告),这意味着在我们等待请求被填充时渲染页面的速度变慢。
有没有办法从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>
或任何类似的东西,让我得到该文件的输出并显示它。
答案 0 :(得分:6)
如果我理解正确,您希望将document.write捕获到变量而不是将其写入文档。你实际上可以这样做:
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;
你仍然可以加载脚本文件。
答案 1 :(得分:3)
要将主页加载与广告加载分离,您可以将广告放在iframe中的自己的页面中,或者类似地,使用AJAX下载脚本文件并在其下载时执行。如果前者不够,因为引用URI或其他什么,后者给你一些灵活性:你可以使用字符串替换将“document.write”重写为其他东西,或者可能暂时替换它像“document.write = custom_function; ”
答案 2 :(得分:1)
您可能会参与the Javascript library I developed,这可以在 window.onload之后使用document.write 加载第三方脚本。在内部,库重写document.write,动态附加DOM元素,运行任何包含的脚本,也可以使用document.write。
我已设置a demo, in which I load 3 Google Ads, an Amazon widget as well as Google Analytics dynamically。
答案 3 :(得分:0)
由于同源策略,您会遇到一些跨域安全问题。如果您有权更改广告内容/服务,我会调查JSONP