`
itmg_lee
  • 浏览: 39654 次
  • 性别: Icon_minigender_1
  • 来自: 陕西省西安市
文章分类
社区版块
存档分类
最新评论

iframe跨域设置高度

阅读更多
こちらのページをそのまま参考にしてhttp://ja.w3support.net/index.php?db=so&id=153152
iframeで別ドメインにあるページを開いた時に、自動的にheightを調整する方法を試してみた。
(※ 別ドメインにあるファイルにjsを追加する必要あり)

別ドメインのhtmlに手を加えずに出来たら、確実に嬉ションしちゃうけど難しいみたいすなぁ。


構成
www.foo.com/home.html, which iframes
└> www.bar.net/framed.html, which iframes
            └> www.foo.com/helper.html

記述例

www.foo.com/home.html
<script>
  // Resize iframe to full height
  function resizeIframe(height)
  {
    // "+60" is a general rule of thumb to allow for differences in
    // IE & and FF height reporting, can be adjusted as required..
    document.getElementById('frame_name_here').height = parseInt(height)+60;
  }
</script>
<iframe id='frame_name_here' src='http://www.bar.net/framed.html'></iframe> 

www.bar.net/framed.html
<body onload="iframeResizePipe()">
<iframe id="helpframe" src='' height='0' width='0' frameborder='0'></iframe>
<script type="text/javascript">
  function iframeResizePipe()
  {
     // What's the page height?
     var height = document.body.scrollHeight;
     // Going to 'pipe' the data to the parent through the helpframe..
     var pipe = document.getElementById('helpframe');
     // Cachebuster a precaution here to stop browser caching interfering
     pipe.src = 'http://www.foo.com/helper.html?height='+height+'&cacheb='+Math.random();
  }
</script> 

www.foo.com/helper.html
<html>
<!--
This page is on the same domain as the parent, so can
communicate with it to order the iframe window resizing
to fit the content
-->
  <body onload="parentIframeResize()">
    <script>
      // Tell the parent iframe what height the iframe needs to be
      function parentIframeResize()
      {
         var height = getParam('height');
         // This works as our parent's parent is on our domain..
         parent.parent.resizeIframe(height);
      }
      // Helper function, parse param from request string
      function getParam( name )
      {
        name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
        var regexS = "[\\?&]"+name+"=([^&#]*)";
        var regex = new RegExp( regexS );
        var results = regex.exec( window.location.href );
        if( results == null )
          return "";
        else
          return results[1];
      }
    </script>
  </body>
</html> 

追記
結局iframe先のページに書き込むの事に代わりがないのなら
window.postMessage() を使って、クロスドメインの iframe の高さを設定する検証 – 写経日記の方がシンプルで素敵だ。

でもwindow.postMessage()というのを使っているので
以下のように(見よう見まねで)window.attachEventを追加してもIE7以下は広がらなかったです。

構成

www.foo.com/parent.html
└> www.bar.net/iframe.html
parent.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<script type="text/javascript">
if (window.addEventListener) { //for W3C DOM
    window.addEventListener("message", receiveSize, false);
} else if (window.attachEvent) { //for IE
window.attachEvent("onmessage",receiveSize);
}
    function receiveSize(e) {
        if (e.origin === "http://www.bar.net/") // for security: set this to the domain of the iframe - use e.uri if you need more specificity
            document.getElementById("bar").style.height = e.data + "px";
    }
</script>
</head>
<body>
<iframe id="bar" src="http://www.bar.net/iframe.html" scrolling="no" > </iframe>
</body>
</html>

www.bar.net/iframe.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<script type="text/javascript">
if (window.addEventListener) { //for W3C DOM
    window.addEventListener("load", postSize, false);
}else if (window.attachEvent) { //for IE
window.attachEvent("onload",postSize);
}
    function postSize(e){
        var target = parent.postMessage ? parent : (parent.document.postMessage ? parent.document : undefined);
        if (typeof target != "undefined" && document.body.scrollHeight)
            target.postMessage(document.getElementById("foo").scrollHeight, "*");
    }

</script>
</head>
<body>
<div id="foo" style="height: 1500px; background:red;"></div>
</body>
</html>


参考资料:
http://d.hatena.ne.jp/bannyan/20090820/1250789189
http://blog.sakurachiro.com/2010/11/iframe-resize/
https://developer.mozilla.org/Ja/DOM/Window.postMessage
分享到:
评论

相关推荐

    iframe 跨域 自动适应高度

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

    Iframe跨域自适应高度

    可以实现Iframe跨域自适应高度 main.htm和agent.htm文件放在www.a.com域内 iframe.htm放在www.b.com域内 这样就可以通过a.com域中的main.htm文件访问b.com域中的iframe.htm文件了

    iframe跨域自适应高度模板

    这段代码会在`iframe`加载完成后,将其高度设置为内部文档的滚动高度。然而,由于跨域限制,如果`iframe`内容不在同一个域下,这种方法可能无效。此时,可以考虑在`iframe`页面添加一个回调函数,通过查询字符串传递...

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

    1. **宽度和高度设置**:确保`iframe`元素的`width`和`height`属性设置正确。可以设置为百分比,使其相对于包含它的容器自适应,如: ```html &lt;iframe src=...

    iframe跨域嵌套自适应高度

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

    跨域控制iframe高度

    这样,父页面可以根据实际高度设置iframe的大小。 4. **使用`window.name`**:虽然`window.name`属性不受同源策略限制,但这种方法较为复杂,需要在两个页面间传递一个包含高度信息的字符串,并在加载时解析。 5. ...

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

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

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

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

    完美解决跨域iframe的高度自适应

    完美解决跨域iframe的高度自适应,完美解决跨子域iframe的高度自适应,嵌入几个页面解决跨域iframe的高度自适应。。。

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

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

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

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

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

    5. 将获取到的高度设置为`iframe`的`height`属性,实现自动适应。 这段描述中提到的“完美自适应高度嵌套代码”很可能就是一个实现上述逻辑的JS代码片段,它可能包含了针对不同浏览器的兼容性处理,比如对于IE6-9...

    iframe自适应宽高

    这个库允许的高度与同跨域iframe来适应他们所包含的内容的宽度自动调整大小。它最常见的问题与使用iframes提供一系列的功能,其中包括: 高度和宽度大小的iframe内容大小。 作品以多个嵌套的iframe。 跨域iframe域...

    iFrame 自动调整高度

    实现`&lt;iframe&gt;`自动调整高度的核心思路是在`&lt;iframe&gt;`内容变化后,获取其内部文档的实际高度,并设置为`&lt;iframe&gt;`的高度。具体来说,可以采用以下两种方法: 1. **通过JavaScript动态调整**: - 监听`&lt;iframe&gt;`的`...

    iframe 自适高度 JS控制代码实现

    4. **设置`iframe`高度**:将获取到的内部页面高度设置为`iframe`的高度。 5. **监听加载完成事件**:为了确保内部页面加载完成后进行高度调整,通常会在`iframe`的`onload`事件中调用高度设置函数。 6. **定时更新...

    javascript动态调整iframe高度

    总之,`javascript`动态调整`iframe`高度的核心在于获取`iframe`内容的实际高度,并将其设置为`iframe`元素的`height`属性。通过正确处理同源策略和跨域通信,我们可以确保无论`iframe`内容如何变化,都能保持页面...

    iframe自动适应高度

    - **Window PostMessage**:这是一种跨域通信方式,通过在`iframe`内容页面发送消息,父页面接收到消息后调整`iframe`的高度。例如,`iframe`内的页面可以发送一个包含其高度的消息,然后父页面监听这个消息并更新`...

    js实现iframe自适应高度

    同时,对于跨域的`iframe`,由于同源策略的限制,可能无法访问`contentWindow`和`contentDocument`,这时需要服务器端配合设置`CORS`策略。 这个简单的JavaScript解决方案能帮助我们实现`iframe`的高度自适应,使得...

    如何设置iframe高度自适应在跨域情况下的可用方法

    总结来说,解决iframe跨域高度自适应问题的关键在于找到一种方式,无论子页面是否在同一域,都能让父页面获取到准确的高度信息。这可能需要结合JavaScript、HTML5特性、CSS布局或者服务器端的配合,具体选择哪种方法...

    iframe实时高度检测

    可以通过设置定时器(如`setInterval`)定期检查,或者只在`iframe`内容发生显著变化(如Ajax请求完成)时触发高度更新。 ### 6. 兼容性问题 `postMessage`和事件监听器在现代浏览器中支持良好,但在旧版本的IE浏览...

Global site tag (gtag.js) - Google Analytics