我有一个包含dfp广告的单页网页应用程序。我有两个dfp adunits,我可以将它们放在内容之间,这是一个特定类别的文章列表。
当我点击其他类别时,它只会加载不同类别的文章(不会更改地址栏中的网址)并触发相同的广告。这就像在同一页面上触发广告一样。
广告不会第二次出现,这是因为您无法在同一页面上使用相同的广告单元。
由于我不能使用dfp提供的刷新功能,因为我每次都会重建DOM,有什么方法可以做到这一点吗?
答案 0 :(得分:1)
这个问题几乎没有。 dfp插件以及正常的googletag实现应适用于单页应用,只需要满足两个要求
enableSingleRequest不应设置为true。如果是Matt的dfp插件,你应该传递enableSingleRequest:false,这样他就不会将它设置为true。 这是因为如果您将其设置为true,则无法在同一页面上提出更多请求以获取广告。另外enableSingleRequest(false)也会失败。
当您动态触发广告时,无需重新加载页面;确保从放置广告的新鲜容器开始。确切原因仍未得到确认,但似乎这就是googletag内部运作的方式。
如果您有任何进一步的评论,请添加。
答案 1 :(得分:0)
如果您使用的是jQuery,请查看我制作的plugin封装DFP,并允许您在单页应用中轻松使用它。
这是一个使用turbolinks的演示,它类似于您的单页应用程序:
http://coop182.github.io/jquery.dfp.js/dfptests/demo1.html
还有其他问题请告诉我。
编辑:这是另一个单页示例 - http://coop182.github.io/jquery.dfp.js/dfptests/spa.html
答案 2 :(得分: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(); });
}
不要担心在每个页面加载时加载库,这与非单页面站点中的相同,并且lib发送合理的缓存头。当然,缺点是每次都会重新评估脚本。好处是你可以用这种方式使用singleRequest模式。