【问题标题】:Redirect document.write from javascript script从 javascript 脚本重定向 document.write
【发布时间】:2009-11-23 05:50:08
【问题描述】:

我们想在我们的网站上投放广告,但我们正在与之交谈的广告服务器在为我们提供足够快的广告方面存在问题。

我看到的问题是我们应该在我们想要显示广告的地方包含一个<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.7 秒会使每个页面的加载时间增加一倍。

标签: javascript


【解决方案1】:

如果我理解正确,您希望将 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;

您仍然可以加载脚本文件。

【讨论】:

  • 我不相信我能做到这一点,因为我无法编辑包含 document.write 的外部脚本。
  • 您不需要编辑外部脚本 - 您可以将“// Ad code here”前后的内容放在单独的
【解决方案2】:

要将主页面加载与广告加载分离,您可以将广告放在 iframe 中自己的页面中,或者类似地,使用 AJAX 下载脚本文件并在它出现时执行它。如果前者不足够,因为引用 URI 或其他原因,后者为您提供了一些灵活性:您可以使用字符串替换将“document.write”重写为其他内容,或者可能暂时将其替换为“document.write = custom_function; ”。

【讨论】:

  • 好主意。我基本上改为: document.load = function(){ var adArea = $('ad'); adArea.innerHtml = "";这似乎运作良好。谢谢
【解决方案3】:

您可能对the Javascript library I developed 感兴趣,它允许使用 document.write after window.onload 加载第 3 方脚本。在内部,该库覆盖 document.write,动态添加 DOM 元素,运行任何包含的脚本,这些脚本也可能使用 document.write。

我已设置a demo, in which I load 3 Google Ads, an Amazon widget as well as Google Analytics dynamically

【讨论】:

    【解决方案4】:

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

    http://docs.jquery.com/Ajax/jQuery.getJSON#urldatacallback

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 2014-07-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2011-05-19
      相关资源
      最近更新 更多