Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript-绕过iframe跨域安全_Javascript_Iframe - Fatal编程技术网

javascript-绕过iframe跨域安全

javascript-绕过iframe跨域安全,javascript,iframe,Javascript,Iframe,我正试图找到一种通过iFrame和javascript解决跨域安全问题的方法 我们有几个发布者站点,它们的简单javascript文件(通过Amazon CloudFront提供)直接嵌入到它们的站点中。该脚本在发布者站点上执行了一些操作(修改DOM),以显示我们为每个发布者站点定位不同的静态广告 当我们通过iframe(googledfp)提供相同的脚本时,由于iframe URL和发布者站点URL不相关,因此跨域安全性,它显然不起作用 现在,我们使用另一个广告服务器,以避免每个发布者都有一个

我正试图找到一种通过iFrame和javascript解决跨域安全问题的方法

我们有几个发布者站点,它们的简单javascript文件(通过Amazon CloudFront提供)直接嵌入到它们的站点中。该脚本在发布者站点上执行了一些操作(修改DOM),以显示我们为每个发布者站点定位不同的静态广告

当我们通过iframe(googledfp)提供相同的脚本时,由于iframe URL和发布者站点URL不相关,因此跨域安全性,它显然不起作用

现在,我们使用另一个广告服务器,以避免每个发布者都有一个HTML文件(因此每个发布的相对路径类似于/iframe buster.HTML),其中包含一些javascript,允许广告在iframe之外扩展。根据我的想法,我不太明白它到底做了什么:

  • 通过iframe提供的广告创建一个子iframe,其URL路径指向iframe buster
  • 新的iframe URL包含一个查询字符串变量(如ad标识符)
  • iframe JS然后可以通过调用parent.parent或top来修改文档DOM

  • 我不知道这是否可行,以前是否有人知道或尝试过类似的事情?

    发布者网站上托管的脚本不需要(事实上不应该)破坏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不知道发布者域,并且由于安全限制,它也无法确定