动态设置iframe高度;没有工作ie和铬

时间:2012-01-30 15:20:37

标签: javascript jquery iframe cross-browser

我正在尝试使用javascript和Jquery动态设置iframe的高度。

但是由于理由这不适用于Ie8&铬。 (但它在firefox上工作正常)

有人可以帮忙吗?

由于

 function resizePanel() {
         window.console.log("ran the resize panel function");
     var frame = document.getElementsByTagName('iframe')[0];
    if(frame != null) {

        var height;            
        if(self.innerHeight) {
            window.console.log("ran the self.innerHeight");
            height= self.innerHeight;                             
        }
        else if (document.documentElement && (document.documentElement.clientHeight)) {
           window.console.log("ran the clientHeight");
           height = document.documentElement.clientHeight;                           
         }
         else if(document.body) {
           window.console.log("ran the document.body");
           height = document.body.clientHeight;            
         }
         frame.style.height = height - 165 + 'px'         
    }};

    $(document).ready(function() {
        resizePanel();
        $(window).resize(function() {
            resizePanel();
        });
    });  

    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(EndRequest);

    function EndRequest(sender, args) {
        resizePanel();
    }

2 个答案:

答案 0 :(得分:1)

您的代码似乎有点复杂,您可以执行以下操作:

function resizePanel() {
    window.console.log("ran the resize panel function");
    var frame = document.getElementsByTagName('iframe')[0];
    if(frame != null) {
        frame.style.height = frame.contentWindow.document.body.scrollHeight + "px";
    }
}

应该适用于所有主流浏览器。

答案 1 :(得分:1)

通过更改一行,本规范适用于所有浏览器。

而不是使用

var frame = document.getElementsByTagName('iframe')[0];

使用

var frame = document.getElementById("ctl00_ctl00_ContentPlaceHolder1_Options_iframe");

问题是Chrome和IE隐藏了Iframe,当我们使用getElementsByTagName时,它会返回所有iframe的数组。所以我们尝试访问[0]索引,它指的是其他一些iframe。

我希望这会有所帮助。

完整的代码是:

 function resizePanel() {

         var frame = document.getElementById("ctl00_ctl00_ContentPlaceHolder1_Options_iframe");
    if(frame != null) {

        var height;            
        if(self.innerHeight) {

            height= self.innerHeight;                             
        }
        else if (document.documentElement && (document.documentElement.clientHeight)) {

           height = document.documentElement.clientHeight;                       
         }
         else if(document.body) {

           height = document.body.clientHeight;            
         }
         frame.style.height = height - 165 + 'px'

    }};

    $(document).ready(function() {
        resizePanel();
        $(window).resize(function() {
            resizePanel();
        });
    });  

    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_endRequest(EndRequest);

    function EndRequest(sender, args) {
        resizePanel();
    }