`
micc010
  • 浏览: 71646 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

js iframe 跨域 自适应

    博客分类:
  • js
阅读更多
经常会有父页面需要通过iframe嵌入另一个子页面,又要适时根据子页面的高度调整父页面中iframe的高度,这就要求 页面必须具有自适应功能。自适应思想比较简单:就是父页面中iframe高度必须要适时根据子页面 高度进行调整。 由于涉及到js操作,因此对于不同域名的自适应解决方案有所不同,主要是在解决跨域问题。

  对于同父级域名下的自适应高度:jipiao.taobao.com/index.htm 页面中嵌入jiudian.taobao.com/xxx.htm页面
       

  1.0   http://jipiao.taobao.com/index.htm中关键代码


<iframe id="J_selfAdapting" src="http://jiudian.taobao.com/xxx.htm" mce_src="http://jiudian.taobao.com/xxx.htm" frameborder="0" scrolling="no" style="height:0;"></iframe>



页面增加如下JS:

<mce:script type="text/javascript"><!--   
 (function(){   
    /**  
     *  获取当前域  
     **/  
    function _getDomain(){   
        var _hostname = window.location.hostname.toString();   
        var _hosts = _hostname.split(".");   
        var _len = _hosts.length;   
        if(_len>2){   
            return _hosts[_len-2]+"."+_hosts[_len-1];   
        }   
        return _hostname;   
    }   
    document.domain = _getDomain();   
})();   
// --></mce:script>


2.子页面http://jiudian.taobao.com/xxx.htm 中嵌入如下代码。即可。

<mce:script type="text/javascript"><!--   
(function(){   
    /**  
     *  获取当前域  
     **/  
    function _getDomain(){   
        var _hostname = window.location.hostname.toString();   
        var _hosts = _hostname.split(".");   
        var _len = _hosts.length;   
        if(_len>2){   
            return _hosts[_len-2]+"."+_hosts[_len-1];   
        }   
        return _hostname;   
    }   
      
    window.onload = function()   
         {   
            //设置子页面的域   
            document.domain=_getDomain();   
            function _setHeight()   
            {   
               if (window.parent != window)   
               {   
                  try  
                  {   
                      //设置父级iframe的高度   
                     parent.document.getElementById("J_selfAdapting").style.height = document.body.scrollHeight+ 'px';   
                  }   
                  catch(e)   
                  {   
                  }   
               }   
               //每隔2s设置一次,主要为了兼容子页面加载完毕之后高度再变化   
               setTimeout(_setHeight,2000);   
            }   
            //子页面加载完毕之后调用一次   
            _setHeight();   
        }   
})();   
// --></mce:script>
 

不同父级页面,例如jipiao.taobao.com, www.koubei.com域名完全不一样,解决办法是使用一个代理页面jipiao.taobao.com/proxy.htm jipiao.taobao.com/index.htm页面嵌入 www.koubei.com/xxxx.htm,而xxx.htm需要隐藏嵌入jipiao.taobao.com/proxy.htm做为代理,可以将高度写在后面jipiao.taobao.com/proxy.htm#500,表示500px高度。 

1.jipiao.taobao.com/index.htm页面中关键代码:

<iframe id="J_selfAdapting" src="http://www.koubei.com/xxxx.htm" mce_src="http://www.koubei.com/xxxx.htm" frameborder="0" scrolling="no" style="height:0;"></iframe>


增加如下JS:

<mce:script type="text/javascript"><!--   
 (function(){   
    /**  
     *  获取当前域  
     **/  
    function _getDomain(){   
        var _hostname = window.location.hostname.toString();   
        var _hosts = _hostname.split(".");   
        var _len = _hosts.length;   
        if(_len>2){   
            return _hosts[_len-2]+"."+_hosts[_len-1];   
        }   
        return _hostname;   
    }   
    document.domain = _getDomain();   
})();   
// --></mce:script>


2. www.koubei.com/xxxx.htm 中关键代码:

<iframe scrolling="no" frameborder="0" style="display: none;" mce_style="display: none;" src="http://jipiao.taobao.com/proxy.htm#597" mce_src="http://jipiao.taobao.com/proxy.htm#597" id="taobaoIframe">  
</iframe>


<mce:script type="text/javascript"><!--   
(function(){   
var pageHeight = document.body.scrollHeight;   
 document.getElementById('taobaoIframe').src = 'http://jipiao.taobao.com/proxy.htm#' + pageHeight;   
})();    
// --></mce:script>


3.在代理页面jipiao.taobao.com/proxy.htm中所有的代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />  
</head>  
<body>  
<mce:script type="text/javascript"><!--   
  (function(){   
    /**   
     *  获取当前域   
     **/   
    function _getDomain(){   
        var _hostname = window.location.hostname.toString();   
        var _hosts = _hostname.split(".");   
        var _len = _hosts.length;   
        if(_len>2){   
            return _hosts[_len-2]+"."+_hosts[_len-1];   
        }   
        return _hostname;   
    }   
    document.domain = _getDomain();   
    var height = window.location.hash.substring(1);   
    try{   
        var el = window.top.document.getElementById('J_selfAdapting');   
        if(el) {   
            el.style.height = height + 'px';   
        }   
    }   
    catch (e) {}   
})();   
// --></mce:script>    
</body>  
</html> 



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/lovingprince/archive/2010/01/05/5134463.aspx
分享到:
评论

相关推荐

    iframe跨域自适应高度模板

    总结来说,`iframe`跨域自适应高度模板主要是通过`CORS`解决跨域限制,通过JavaScript监听`load`事件或使用`postMessage`通信来实现内容高度的动态调整。这些技术在现代网页开发中十分常见,能帮助我们更灵活地整合...

    iframe跨域常用问题和iframe页面自适应

    本篇文章将深入探讨两个关键知识点:`iframe`跨域问题以及`iframe`页面的自适应。 一、`iframe`跨域问题 跨域是Web开发中的一个重要概念,它限制了浏览器从一个源获取另一个源的资源,以保护用户的安全。当`iframe...

    iframe跨域嵌套自适应高度

    ### iframe跨域嵌套自适应高度 在网页开发过程中,`iframe`作为一种常见的网页元素,被广泛用于在当前页面中嵌入另一个独立的文档或页面。然而,在实际应用中经常会遇到一些问题,如跨域限制、自适应高度调整以及...

    iframe跨域高度自适应例子源码

    标题"iframe跨域高度自适应例子源码"指的是一个实例,展示了如何在跨域的情况下使`iframe`内容自动调整高度以适应其内部内容。这个例子提供了一个在线演示(http://okiner.cn/demo/cross-domain/iframe.html)以及源...

    js实现iframe自适应高度

    本文将详细讲解如何使用JavaScript实现`iframe`自适应高度的解决方案,确保在各种主流浏览器中都能正常工作。 首先,理解`iframe`的基本结构和属性是至关重要的。`iframe`标签通常包含`src`属性,用于指定要加载的...

    IFrame跨域高度自适应实现代码

    本文将深入探讨如何实现IFrame跨域高度自适应的解决方案。 首先,我们需要了解什么是跨域。在Web安全策略中,浏览器执行同源策略,这意味着一个网页只能访问与之同源(协议、域名、端口相同)的IFrame内容。但当...

    解决iframe跨域高度自适应问题的源码

    本篇文章将深入探讨如何解决iframe跨域高度自适应的问题。 首先,我们需要理解为什么会出现跨域问题。根据浏览器的同源策略,一个网页只能访问与之同源(即协议、域名和端口完全相同)的资源。而跨域则意味着iframe...

    iframe 跨域 自动适应高度

    1. **同源策略与iframe跨域** 同源策略是浏览器安全的一项基础机制,它限制了来自不同源的"文档"或脚本相互交互。当一个`iframe`加载的页面与包含它的页面不在同一个源下时,就会遇到跨域问题。为了解决这个问题,...

    Iframe 高度自适应浏览器高度

    当Iframe加载跨域内容时,安全限制可能会影响高度的动态调整。在这种情况下,可以使用HTML5的`sandbox`属性,配合`allow-scripts`允许Iframe内的脚本运行,以便计算高度。 5. **设定定时器**: 有些情况下,内容...

    iframe高度自适应

    然而,由于同源策略的限制,跨域的`iframe`无法通过JavaScript获取其内容的高度,这给高度自适应带来了挑战。 **解决方法:** 1. **纯CSS解决方案**: 在某些情况下,如果`iframe`内容与主页面同源,可以使用CSS...

    js实现iframe自动自适应高度的方法

    本篇文章将详细介绍如何使用JavaScript实现Iframe的自动自适应高度。 首先,理解基本概念。Iframe的`height`属性决定了其显示区域的高度,当我们想要Iframe内容自适应时,我们需要动态地修改这个属性值,使其等于...

    iframe内容高度 iframe自适应高度终极解决Iframe设置高度后无法缩小问题

    总的来说,通过使用JavaScript动态计算`&lt;iframe&gt;`内容的高度并设置`&lt;iframe&gt;`的高度,可以有效地解决`&lt;iframe&gt;`内容高度自适应以及设置高度后无法缩小的问题。同时,要注意兼容性问题和跨域限制,以确保在各种环境下...

    iframe自动适应高度(完美自适应高度嵌套代码),兼容目前主流浏览器。

    这段描述中提到的“完美自适应高度嵌套代码”很可能就是一个实现上述逻辑的JS代码片段,它可能包含了针对不同浏览器的兼容性处理,比如对于IE6-9这些老版本浏览器的特殊处理,因为它们对某些DOM操作和事件处理的支持...

    js跨域问题之跨域iframe自适应大小实现代码

    这种情况下,要想实现跨域iframe大小的自适应,需要采用一些特殊的策略。 解决方案的思路可以分解为以下步骤: 1. 假设有一个页面a.htm属于域A,它通过iframe嵌入了域B下的页面b.html。由于b.html的尺寸可能会变化...

    iframe根据页面内容自适应高度和宽度

    3. **第三方库**:对于更复杂的需求,如跨域`iframe`的高度自适应,可以使用第三方库,如`iframe-resizer`。`iframe-resizer`库提供了一种解决方案,它允许父页面和子页面之间进行通信,动态调整`iframe`的高度。...

    Iframe 框架自适应被嵌入页面高度

    本文将深入探讨如何使用JavaScript来控制Iframe框架自适应被嵌入页面的高度。 首先,我们要理解为什么需要动态调整Iframe的高度。由于Iframe的内容可能来自于不同的来源,其内容长度是不确定的,因此在页面加载时...

    Iframe高度自适应(兼容IE/Firefox、同域/跨域)

    "Iframe高度自适应(兼容IE/Firefox、同域/跨域)"这一主题是关于如何让内嵌在Iframe中的页面能够根据其内容动态调整自身的高度,确保在不同浏览器(如IE和Firefox)以及处理同域和跨域情况时都能正常显示。...

    再谈iframe自适应高度

    - 另一个问题是跨域问题,由于同源策略的限制,浏览器不允许JavaScript在不同的源之间获取或修改DOM元素,这使得在父页面中动态获取iframe内容的高度变得复杂。 3. **解决方案**: - **JavaScript/jQuery方法**:...

    iframe_自适应高度(简单好用).txt

    `iframe`自适应高度主要依赖于JavaScript来动态调整其高度属性。核心思路是监听`iframe`加载完成事件(`onload`),然后通过访问`iframe`内部文档的高度信息,计算出正确的高度值,并将其应用到`iframe`元素上。这通常...

Global site tag (gtag.js) - Google Analytics