javascript - 插页式广告(异步广告),无需在网站上放置任何代码

标签 javascript html iframe ads postmessage

我正在尝试创建一个抛出灯箱的广告,但广告本身将被放置在 iframe 内和/或注入(inject)到网站(不是同一域)。有些网站会将其放在 iframe 中,有些则按原样放在网站上。我无法控制要放置广告的网站。

我知道我可以使用 postMessage() 从 iframe 内发送数据,并使用接收到的数据在父窗口上执行命令,但我无法在父窗口上放置任何代码。是否有一个通用的解决方案适用于这两种场景?我想将一些内容推送到父窗口。

这段代码完全符合我的要求,但我不知道它是如何做到的:

<script src="http://bs.serving-sys.com/BurstingPipe/adServer.bs?cn=rsb&c=28&pli=17085731&PluID=0&w=1&h=1&ord=[timestamp]&ucm=true&ncu=$$%c$$"></script>
<noscript>
<a href="%chttp%3A//bs.serving-sys.com/BurstingPipe/adServer.bs%3Fcn%3Dbrd%26FlightID%3D17085731%26Page%3D%26PluID%3D0%26Pos%3D67849382" target="_blank"><img src="%%VIEW_URL_ESC%%.http://bs.serving-sys.com/BurstingPipe/adServer.bs?cn=bsr&FlightID=17085731&Page=&PluID=0&Pos=67849382" border=0 width=1 height=1></a>
</noscript>

最佳答案

如果代码位于框架/iframe 内,并且您无权访问父框架/窗口,并且父框架/窗口没有通过 postMessage() 设置 API 来加载弹出窗口/lightbox 那么答案是否定的。

您可以执行此操作的唯一时间是使用友好的 iFrame(与父框架/窗口相同的域)或完成解决方法以允许访问父框架/窗口。请注意,即使完成此操作并且您访问并更改了父级,您也可能会激怒网站的发布者或所有者,如果他们没有预料到您要添加的内容,或者您​​有意或无意地更改了他们的网站或样式表,则框架会打开。以任何方式或注入(inject)可能是恶意的脚本。如果您反复这样做,您也可能会被您发送广告所通过的任何网络禁止。

如果使用 SafeFrame,您将无法执行此操作。 SafeFrame 旨在防止广告商更改顶级窗口/框架,如果广告是可展开的广告类型,但 SafeFrame API 中没有弹出窗口,它会提供 API 来展开广告。

如果您想测试是否有权访问父/顶部框架/窗口,您可以尝试:

对于顶部框架/窗口:

try { window.top.location.href } catch(e) {
    // Exception was thrown meaning you do not have access to the top window/frame!
}

对于父(可能不是最顶层)框架/窗口:

try { window.parent.location.href } catch(e) {
    // Exception was thrown meaning you do not have access to the parent window/frame!
}

关于javascript - 插页式广告(异步广告),无需在网站上放置任何代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356027/

相关文章:

javascript - 默认滚动条位置

javascript - IFrame站点的访问URL

Javascript 类重写方法

javascript - 从 Sencha Touch 2 到外部服务器的跨域更新

javascript - 如果它有值,则将 html 输入框设置为只读

html - 将 <p> 与图像对齐不起作用

html - Bootstrap-Table 过滤器大于/小于

jquery - Facebook 喜欢 iframe 减慢页面加载速度

javascript - jQuery Select2 从parent.window到子iframe使用

javascript - 在 forio/contour 中执行 render 函数后添加回调