zoukankan      html  css  js  c++  java
  • IFRAME跨域

    问题:在A域中有文件A,A内嵌一个IFRAME(frame_a),frame_a引用B域中的文件B。在B加载完成后,需要根据B的实际宽,高来确定frame_a的宽高,并剧中显示。于是,需要在文件B中操作frame_a,即存在跨域操作,而JS的安全机制是不允许跨域操作的。

    解决思路:在B文件中,内嵌一个IFRAME(frame_b)。frame_b设置成不可见,并引用A域文件C。在文件C中通过parent.parent.document来获得文件A的文档对象。

    文件A:

    <html>
        <head></head>
        <body>
            <iframe src="http://b/b.html"/>
         <body>
    </html>
    

     

    文件B:

      文件B通过引用A域的JS文件d.js来加载A域的文C

    <html >
    <head>
    
    
    </head>
    <body  style="margin: 0px;padding: 0px;background-color: white;">
    
      <p>文件B </p>  
    
    
    
    <script  type="text/javascript" src="http://a/d.js"></script> 
    </body>
    
    </html>
     
    

      

    d.js:

    function calcPageHeight(doc) { 
        var cHeight = Math.max(doc.body.clientHeight, doc.documentElement.clientHeight) 
        var sHeight = Math.max(doc.body.scrollHeight, doc.documentElement.scrollHeight) 
        var height  = Math.max(cHeight, sHeight) 
        return height 
    } 
    
    
    function calcPageWidth(doc) { 
        var cWidth = Math.max(doc.body.clientWidth, doc.documentElement.clientWidth) 
        var sWidth = Math.max(doc.body.scrollWidth, doc.documentElement.scrollWidth) 
        var width  = Math.max(cWidth, sWidth) 
        return width 
    } 
    window.onload = function() { 
        var doc = document ;
        var height = calcPageHeight(doc) ;
        var width = calcPageWidth(doc) 
       
        var myifr =  doc.createElement("iframe");
       	doc.body.appendChild(myifr);
       	myifr.style.display="none";
        if (myifr) { 
            myifr.src = 'http://a/c.html?height=' + height+'&width='+width; 
         
        } 
    }; 
    

    文件C:

    <!DOCTYPE html> 
    <html> 
      <head> 
     
        <meta charset='utf-8' /> 
        <title>C.html</title> 
        <script type="text/javascript" src="js/jquery-1.8.1.min.js"></script>
      </head> 
      <body> 
        <script type="text/javascript"> 
            window.onload = function() { 
                var isSet = false
                var inteval = setInterval(function() { 
                    var search = location.search.replace('?', '') 
                    if (isSet) { 
                        clearInterval(inteval) 
                        return   
                    } 
                    if (search) { 
                    	var searchh=search.split('&')[0];
                    	var searchw=search.split('&')[1];
                        var height = searchh.split('=')[1];
                     	var width = searchw.split('=')[1];
                     	
                     	var left=Math.max((window.screen.availWidth-width)/2,0);
                     	var top=Math.max((window.screen.availHeight-height)/2,0);
                     
                        var doc = parent.parent.document; 
                        var ifr = doc.getElementById('adv') 
                        
                        $(ifr).animate({height:height+"px",width+"px",left:left+"px",top:top+"px"});
                        isSet = true
                    } 
                }, 500) 
            } 
        </script> 
      </body> 
    </html>
    

      

  • 相关阅读:
    TensorboardX的使用【有手就⭐系列】
    Python学习记录
    es 之 自定义 mapping(五)
    es 索引和文档 API (四)
    布尔查询(三)
    term 和 match 查询(二)
    使用 Python 批量将数据插入到 ES中
    【flask + vue 前后端分离博客】设计 User 用户(三)
    【flask + vue 前后端分离博客】使用 axios 访问接口(二)
    【flask + vue 前后端分离博客】创建第一个 Flask RESTFul(一)
  • 原文地址:https://www.cnblogs.com/jlx1/p/4623760.html
Copyright © 2011-2022 走看看