正确调整包含未知尺寸图像的iframe的大小

时间:2009-04-27 22:53:43

标签: c# javascript jquery resize

我有一个C#webbrowser,它包含一个包含多个iframe的html页面。每个iframe都包含一个任意的html文件,通常带有图像。 img标签通常没有任何宽度或高度属性(即,它通常只是<img src="someimage.jpg">)。

我已经阅读了如何根据内容调整iframe的大小,并使用jquery让它工作。 iframe的html中包含以下jquery片段:

$(document).ready(function() {
  $('img').each(function(){ 
        $(this) 
            .bind('load readystatechange', function(e) {
                var iframes = window.top.document.getElementsByName(window.name);
                if (iframes.length == 1) {
                    window.top.DoResizeFrame(iframes[0]);
                }
            })
    }); 

DoResizeFrame在父html文件中定义(webbrowser正在显示的文件):

 function DoResizeFrame(fr) {
        if (fr && fr.Document && fr.Document.body) {
            fr.style.height = fr.Document.body.scrollHeight + 'px'; 
            fr.style.width = fr.Document.body.scrollWidth + 'px';
        }
    }

我还从父文档的$(document).ready事件中调用DoResizeFrame。这很有效 - 如果没有图像,文档的就绪事件会触发调整大小。如果有图像,则每次加载图像时,都会正确调整iframe的大小。

但是,加载大图像会导致iframe尺寸不正确,直到图像完全加载为止。由于我很少在图像标签中使用宽度和高度属性,我想我可以使用jquery来监听图像的readystatechange事件,当它“加载”时,选择图像的大小并正确调整大小iframe甚至在图像仍在加载时。不幸的是,至少在IE7中,readystatechange =加载仅在图像下载完成后发生。

有没有人有任何想法如何只是通过“<img src="someimage.jpg">”检测我的html中引用的图像的大小而不等待整个下载发生?我正在尝试通过正确调整大小来提供最佳用户体验,这样即使大图像需要一段时间才能下载,用户也可以阅读其余的iframe。

谢谢! 牛仔

1 个答案:

答案 0 :(得分:1)

可靠的一种方法是在下载之前询问服务器图像的大小。我用.net完成了这个,这很容易。