我有一个包含 dfp 广告的单页 Web 应用程序。我有两个正在触发的 dfp adunit,它们被放置在内容之间,内容是特定类别的文章列表。
当我点击另一个类别时,它只会加载不同类别的文章(不会更改地址栏中的 url)并触发相同的广告。所以这就像在同一页面上触发广告一样。
广告不会第二次出现,这是因为您不能在同一页面上使用相同的 adunit。
由于我的 DOM 每次都被重建,所以我无法使用 dfp 提供的刷新功能,有什么办法可以做到这一点吗?
我有一个包含 dfp 广告的单页 Web 应用程序。我有两个正在触发的 dfp adunit,它们被放置在内容之间,内容是特定类别的文章列表。
当我点击另一个类别时,它只会加载不同类别的文章(不会更改地址栏中的 url)并触发相同的广告。所以这就像在同一页面上触发广告一样。
广告不会第二次出现,这是因为您不能在同一页面上使用相同的 adunit。
由于我的 DOM 每次都被重建,所以我无法使用 dfp 提供的刷新功能,有什么办法可以做到这一点吗?
这个问题几乎没有什么收获。dfp 插件以及正常的 googletag 实现应该适用于单页应用程序,只需满足两个要求
enableSingleRequest 不应设置为 true。如果是 Matt 的 dfp 插件,您应该传递 enableSingleRequest:false 以便他不会将其设置为 true。这是因为如果您将其设置为 true,您将无法在同一页面上提出更多请求来获取广告。enableSingleRequest(false) 也失败了。
当您动态触发广告时,即无需重新加载页面;确保从放置广告的新容器开始。其确切原因仍未得到证实,但似乎这就是 googletag 在内部的工作方式。
如果您有任何进一步的意见,请添加。
如果您使用 jQuery,请查看我制作的插件,它封装了 DFP,并允许您在单页应用程序中轻松使用它。
这是一个使用 turbolinks 的演示,类似于您的单页应用程序:
http://coop182.github.io/jquery.dfp.js/dfptests/demo1.html
有更多问题请告诉我。
编辑:这是另一个单页示例 - http://coop182.github.io/jquery.dfp.js/dfptests/spa.html
艰难地去做:
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 模式。