2

我有一个包含 dfp 广告的单页 Web 应用程序。我有两个正在触发的 dfp adunit,它们被放置在内容之间,内容是特定类别的文章列表。

当我点击另一个类别时,它只会加载不同类别的文章(不会更改地址栏中的 url)并触发相同的广告。所以这就像在同一页面上触发广告一样。

广告不会第二次出现,这是因为您不能在同一页面上使用相同的 adunit。

由于我的 DOM 每次都被重建,所以我无法使用 dfp 提供的刷新功能,有什么办法可以做到这一点吗?

4

3 回答 3

1

这个问题几乎没有什么收获。dfp 插件以及正常的 googletag 实现应该适用于单页应用程序,只需满足两个要求

  1. enableSingleRequest 不应设置为 true。如果是 Matt 的 dfp 插件,您应该传递 enableSingleRequest:false 以便他不会将其设置为 true。这是因为如果您将其设置为 true,您将无法在同一页面上提出更多请求来获取广告。enableSingleRequest(false) 也失败了。

  2. 当您动态触发广告时,即无需重新加载页面;确保从放置广告的新容器开始。其确切原因仍未得到证实,但似乎这就是 googletag 在内部的工作方式。

如果您有任何进一步的意见,请添加。

于 2013-11-21T06:53:20.793 回答
0

如果您使用 jQuery,请查看我制作的插件,它封装了 DFP,并允许您在单页应用程序中轻松使用它。

这是一个使用 turbolinks 的演示,类似于您的单页应用程序:

http://coop182.github.io/jquery.dfp.js/dfptests/demo1.html

有更多问题请告诉我。

编辑:这是另一个单页示例 - http://coop182.github.io/jquery.dfp.js/dfptests/spa.html

于 2013-11-11T21:51:22.560 回答
0

艰难地去做:

function myGoogleTagLoaderFn(callback) {
    // reset googletag lib
    window.googletag = null;

    // we're using requirejs, so we have to do this as well
    window.requirejs.undef('http://www.googletagservices.com/tag/js/gpt.js');

    myRequireOr$getScriptFn('http://www.googletagservices.com/tag/js/gpt.js', function success() { callback(); });
}

不用担心在每次页面加载时加载库,这与在非单页站点中相同,并且库会发送合理的缓存标头。当然,缺点是脚本每次都会重新评估。好处是您可以通过这种方式使用 singleRequest 模式。

于 2014-06-12T11:30:43.843 回答