DoubleClick For Publishers (DFP):使用异步 GPT 投放展开式广告
DoubleClick For Publishers (DFP) : Serving expandable ads using asynchronous GPT
我正在使用异步 GPT 投放我的展开式广告,但由于异步代码似乎不是友好的 iframe,广告素材被中断了。
我使用 DOM 函数来转义 iframe 父级,但我认为我做不到,因为广告素材在页面呈现之前呈现。
这是我的标签示例
<script type='text/javascript' src='http://www.googletagservices.com/tag/js/gpt.js'>
googletag.pubads().definePassback('6917646/H24info/H24INFO_ATF_HOME_728x90', [[728,90]]).setClickUrl('[INSERT_CLICK_COUNTER_HERE]').display();
googletag.pubads().enableSingleRequest();
googletag.pubads().addEventListener('slotRenderEnded', function(event) {
var sas = document.getElementById("sas_format_33008");
var gpt = document.getElementById("gpt_unit_6917646/H24info/H24INFO_ATF_HOME_728x90_1_ad_container");
gpt.style.position = "absolute";
gpt.style.zIndex = "100";
sas.style.height = "90px";
});
googletag.enableServices();
</script>
有没有人可以帮助我?
您将需要使用 iframe 破坏器
您可以试试下面的代码。请记住,您需要取消选中创意设置中的 "Serve into a SafeFrame" 配置。广告素材的类型必须是自定义、第三方或模板)
if (top === self) {
//
} else {
var parentIframes = top.document.querySelectorAll('iframe');
for (var i=0; i < parentIframes.length; i++) {
var el = parentIframes[i];
if (el.contentWindow === self) {
// here you can create an expandable ad
var expandableAd;
var googleDiv = el.parentNode;
googleDiv.insertBefore(expandableAd, el);
}
}
}
更多信息:
- Iframe Buster purpose
- Working with Friendly Frames
更多帮助:
另一种选择是使用 Post 消息。但是您需要在您的主站点中放置一个事件侦听器。
像这样:
<script type="text/javascript">
(function() {
function onMessageReceived(e) {
if (
//e.origin !== 'http://tpc.googlesyndication.com' ||
typeof e.data !== 'object' ||
typeof e.data.id !== 'string' ||
e.data.cmd !== 'setStyle' ||
typeof e.data.params !== 'object'
) {
return;
}
var frame = document.getElementById(e.data.id);
if (frame === null) {
return;
}
Object.keys(e.data.params).forEach(function(param) {
frame.style[param] = e.data.params[param];
});
}
if (window.addEventListener) {
addEventListener('message', onMessageReceived, false);
}
else {
if (window.attachEvent) {
attachEvent('onmessage', onMessageReceived);
}
else {
window.onmessage = onMessageReceived;
}
}
})();
</script>
然后在创意代码中,您将必须调用事件侦听器来调整需要展开的元素的大小。例如:
<script>
(function(){
if (window.top.postMessage) {
window.top.postMessage({
cmd: 'setStyle',
id: 'div-of-the-banner',
params: {
display: 'block',
height: '600px',
width: '300px'
}
}, '*');
}
})();
</script>
如果实际上有多个元素在固定广告素材的尺寸,您可能需要多次调用此调整尺寸脚本。
我正在使用异步 GPT 投放我的展开式广告,但由于异步代码似乎不是友好的 iframe,广告素材被中断了。
我使用 DOM 函数来转义 iframe 父级,但我认为我做不到,因为广告素材在页面呈现之前呈现。
这是我的标签示例
<script type='text/javascript' src='http://www.googletagservices.com/tag/js/gpt.js'>
googletag.pubads().definePassback('6917646/H24info/H24INFO_ATF_HOME_728x90', [[728,90]]).setClickUrl('[INSERT_CLICK_COUNTER_HERE]').display();
googletag.pubads().enableSingleRequest();
googletag.pubads().addEventListener('slotRenderEnded', function(event) {
var sas = document.getElementById("sas_format_33008");
var gpt = document.getElementById("gpt_unit_6917646/H24info/H24INFO_ATF_HOME_728x90_1_ad_container");
gpt.style.position = "absolute";
gpt.style.zIndex = "100";
sas.style.height = "90px";
});
googletag.enableServices();
</script>
有没有人可以帮助我?
您将需要使用 iframe 破坏器
您可以试试下面的代码。请记住,您需要取消选中创意设置中的 "Serve into a SafeFrame" 配置。广告素材的类型必须是自定义、第三方或模板)
if (top === self) {
//
} else {
var parentIframes = top.document.querySelectorAll('iframe');
for (var i=0; i < parentIframes.length; i++) {
var el = parentIframes[i];
if (el.contentWindow === self) {
// here you can create an expandable ad
var expandableAd;
var googleDiv = el.parentNode;
googleDiv.insertBefore(expandableAd, el);
}
}
}
更多信息:
- Iframe Buster purpose
- Working with Friendly Frames
更多帮助:
另一种选择是使用 Post 消息。但是您需要在您的主站点中放置一个事件侦听器。 像这样:
<script type="text/javascript">
(function() {
function onMessageReceived(e) {
if (
//e.origin !== 'http://tpc.googlesyndication.com' ||
typeof e.data !== 'object' ||
typeof e.data.id !== 'string' ||
e.data.cmd !== 'setStyle' ||
typeof e.data.params !== 'object'
) {
return;
}
var frame = document.getElementById(e.data.id);
if (frame === null) {
return;
}
Object.keys(e.data.params).forEach(function(param) {
frame.style[param] = e.data.params[param];
});
}
if (window.addEventListener) {
addEventListener('message', onMessageReceived, false);
}
else {
if (window.attachEvent) {
attachEvent('onmessage', onMessageReceived);
}
else {
window.onmessage = onMessageReceived;
}
}
})();
</script>
然后在创意代码中,您将必须调用事件侦听器来调整需要展开的元素的大小。例如:
<script>
(function(){
if (window.top.postMessage) {
window.top.postMessage({
cmd: 'setStyle',
id: 'div-of-the-banner',
params: {
display: 'block',
height: '600px',
width: '300px'
}
}, '*');
}
})();
</script>
如果实际上有多个元素在固定广告素材的尺寸,您可能需要多次调用此调整尺寸脚本。