javascript-绕过iframe跨域安全
我正试图找到一种通过iFrame和javascript解决跨域安全问题的方法 我们有几个发布者站点,它们的简单javascript文件(通过Amazon CloudFront提供)直接嵌入到它们的站点中。该脚本在发布者站点上执行了一些操作(修改DOM),以显示我们为每个发布者站点定位不同的静态广告 当我们通过iframe(googledfp)提供相同的脚本时,由于iframe URL和发布者站点URL不相关,因此跨域安全性,它显然不起作用 现在,我们使用另一个广告服务器,以避免每个发布者都有一个HTML文件(因此每个发布的相对路径类似于/iframe buster.HTML),其中包含一些javascript,允许广告在iframe之外扩展。根据我的想法,我不太明白它到底做了什么:javascript-绕过iframe跨域安全,javascript,iframe,Javascript,Iframe,我正试图找到一种通过iFrame和javascript解决跨域安全问题的方法 我们有几个发布者站点,它们的简单javascript文件(通过Amazon CloudFront提供)直接嵌入到它们的站点中。该脚本在发布者站点上执行了一些操作(修改DOM),以显示我们为每个发布者站点定位不同的静态广告 当我们通过iframe(googledfp)提供相同的脚本时,由于iframe URL和发布者站点URL不相关,因此跨域安全性,它显然不起作用 现在,我们使用另一个广告服务器,以避免每个发布者都有一个
我不知道这是否可行,以前是否有人知道或尝试过类似的事情?发布者网站上托管的脚本不需要(事实上不应该)破坏iframe。相反,此脚本的目的是在AD iframe(托管在DFP内)和发布者页面之间建立通信通道 这里的问题是——在运行时,发布页面上的脚本知道什么是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);
}
而广告iframe中的JS可以
parent.postMessage(/*where to create the AD slot*/);
注意:“通过iframe提供的广告会创建一个子iframe,其中包含指向iframe buster的URL路径”-这是不可能的,因为iframe不知道发布者域,并且由于安全限制,它也无法确定