从动态生成的iFrame中获取高度从jQuery JS File返回函数

时间:2016-03-23 20:27:07

标签: jquery iframe

现在,这是一个奇怪的问题,我无法弄清楚为什么会这样。通过点击,我将生成一个动态iframe,其来源来自&#39; href&#39; <a>标记中的属性,在不同的点击中销毁它。我试图在iframe中获取<body>标签的高度,以便开始根据各种可扩展区域更改高度和宽度的过程。但是,在我下面的例子中,获得高度,我实际上直接从jQuery Javascript文件(在我的例子中,jquery-1.11.1.js)获得一个函数。这是相关代码:

$(document.body).on('click', 'table.foo tr td a', function(e){
          e.preventDefault(); // anchor won't go to new page
          e.stopPropagation(); // bubble-free click
          var framesrc = $(this).attr('href')
          $(this).closest('tr.varrow').after('<tr class="varFrameTr"><td colspan="2" class="varFrameCont"><iframe name="varFrame" class="varFrame" src='+framesrc+'></iframe><div class="closeiframe"><span class="glyphicon glyphicon-remove-sign"></span></div></td></tr>' );
          var color = '';
          $('.varFrameTr').fadeIn(750, function(){
            if( $('td.varFrameCont').length )       
                {
                  $(this).find('iframe.varFrame').contents().on('click', 'div#framefoo' ,function(){
                    var tz = $(this).height;
                    console.log(tz);
                  }); 
                } else {
                  console.log('nada');
                }
      });
  }); 

简单地说,div#framefoo是iframe中<body>之后的主要容器,我正试图从中获取高度。但是当新表行淡出并调用iframe时,在控制台中获取该高度的结果将从第10206行开始返回jquery-1.11.1.js中的函数:

function( margin, value ) {
        var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
            extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );

        return access( this, function( elem, type, value ) {
            var doc;

            if ( jQuery.isWindow( elem ) ) {
                // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
                // isn't a whole lot we can do. See pull request at this URL for discussion:
                // https://github.com/jquery/jquery/pull/764
                return elem.document.documentElement[ "client" + name ];
            }

            // Get document width or height
            if ( elem.nodeType === 9 ) {
                doc = elem.documentElement;

                // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
                // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
                return Math.max(
                    elem.body[ "scroll" + name ], doc[ "scroll" + name ],
                    elem.body[ "offset" + name ], doc[ "offset" + name ],
                    doc[ "client" + name ]
                );
            }

            return value === undefined ?
                // Get width or height on the element, requesting but not forcing parseFloat
                jQuery.css( elem, type, extra ) :

                // Set width or height on the element
                jQuery.style( elem, type, value, extra );
        }, type, chainable ? margin : undefined, chainable, null );
    };

如果我只是抓住<body>标签并尝试获取其高度,那么结果相同。我发现错误使我的jQuery函数因与jQ的实际JS中的某些内容冲突而中断,但从未直接将代码作为返回值返回。任何想法为什么会发生这种情况以及如何在iframe的高度和宽度范围内获取元素而没有这个非常奇怪的错误?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我仍然想知道为什么而不是高度的一些数值像素值我从我使用的jQuery版本得到了一个函数:jquery-1.11.1.js。但是,由于在Get height of element inside iframe with jQuery处获得iframe元素高度的解释,至少我现在可以正确地获得高度信息。我上面代码的关键条件现在是:

if( $('td.varFrameCont').length ) {
                  var mydiv = $('iframe.varFrame').contents().find('body');
                  var h = mydiv.height();
                  console.log(h);
                } else {
                  console.log('nada');
                }

瞧,这是我的身高信息。同时,如果其他人可以帮助我理解为什么我直接从jQuery的JS文件中获取代码,我怀疑这对于其他人来说是有用的。