我刚碰到这个。似乎 DFP 已经摆脱了启用同步请求选项。出于几个原因,这从来都不是一个很好的解决方案(正如其他人指出的那样)。首先,如果您在同一页面上有异步请求,它就不能很好地工作。其次,它是“阻止”并减慢您的页面速度。
友好的 iFrame
似乎现在首选的方法是使用“Friendly iFrame”。要使用友好 iFrame,请在 DFP 中设置广告素材时,取消选中“投放到 SafeFrame”。DFP 现在会将您的广告投放到“友好 iFrame”中。友好 iFrame 是从与父窗口相同的域提供的 iFrame。由于域匹配,浏览器安全规则允许 iframe 中的 JavaScript 访问父窗口(通过window.parent.document
)。现在您可以调整 iframe 的大小以使其全屏显示。为此,请在您的广告代码中添加如下内容:
window.parent.document.getElementById(window.name).style.cssText = "position: fixed; top: 0; left: 0; bottom: 0; width: 100%; height: 100%; margin: 0;";
如果您的广告有办法自行关闭,请确保在关闭时也将 Friendly iFrame 缩小(否则展开的 Friendly iFrame 会阻止底层页面上的鼠标操作)。你可以这样做:
window.parent.document.getElementById(window.name).style.cssText = "position: relative; width: 0px; height: 0px;";
几个笔记
出于安全原因,只要有可能,SafeFrame 是投放广告的首选方式。SafeFrame 提供了一个 API 用于在不允许完全访问的情况下与父窗口进行通信。SafeFrame 包含用于增加 iFrame 大小的展开选项,但是,DFP 的 SafeFrame 实施似乎不允许您展开到全屏。出于这个原因,似乎最好将友好 iFrame 用于插页式广告。您可以在此处试用 DFP 的 SafeFrame 实施。
请注意,您应该只允许您完全信任的内容在 Friendly iFrame 中运行,因为它可以做很多恶意的事情(例如窃取用户会话 cookie 等)。