我正在尝试用iframe和javascript来解决跨域安全问题。
我们有几个发布商网站都有我们简单的javascript文件(通过Amazon CloudFront提供),这些文件直接嵌入到他们的网站上。该脚本会在发布商网站上执行一些操作(修改DOM),以显示我们针对每个发布商网站进行不同排名的静态广告。
当我们通过iframe(Google DFP广告管理系统)投放相同的脚本时,由于iframe网址与发布商网站网址不相关,因此跨域安全性显然无效。
现在我们使用另一个广告服务器,为了解决每个发布商所拥有的HTML文件(因此每个发布的相对路径类似于/iframe-buster.html),其中包含一些允许广告展开的javascript在iframe之外。我不明白我的想法到底是做什么的:
我不知道这是否有用,有人知道或尝试过这样的事情吗?
答案 0 :(得分:1)
发布商网站上托管的脚本不需要(事实上不应该)破坏iframe。相反,此脚本的目的是在AD iframe(托管在DFP广告管理系统中)和发布商页面之间建立通信渠道。
这里的问题是 - 在运行时,pub页面上的脚本知道什么是DFP iframe url域,但是由于跨域访问限制,通过cloudfront提供的脚本不知道发布者页面url是什么。
因此发布者脚本可以设置postMessage处理程序以接收来自广告Iframe的消息。它可以做类似的事情
function registerPostMessageHandler() {
// Listen to message from child window
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
eventer(messageEvent,function(e) {
var key = e.message ? "message" : "data";
var data = e[key];
console.log("Message obtained from origin " + e.origin + ' data: ' + data);
//Insert an AD slot based on the message
},false);
}
和AD iframe中的JS可以做
parent.postMessage(/*where to create the AD slot*/);
注意:“通过iframe投放的广告会创建一个带有iframe破坏者路径的子路径” - 这是不可能的,因为iframe不知道发布者域,并且由于安全限制,它可以'弄清楚。