欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

浏览器兼容问题项目总结(六) 页面嵌套多个iframe滚动条兼容性修改

程序员文章站 2023-12-31 16:31:16
...

本文转自:http://blog.csdn.net/u014744118/article/details/70792489
最近几天一直在chrome和IE的兼容性问题上花费较多时间,将我在iframe这个问题上的一个坑给大家做个分享。

iframes 提供了一个简单的方式把一个网站的内容嵌入到另一个网站中。但我们需要慎重的使用iframe。iframe的创建比其它包括scripts和css的 DOM 元素的创建慢了 1-2 个数量级。使用 iframe 的页面一般不会包含太多 iframe,所以创建 DOM 节点所花费的时间不会占很大的比重。但带来一些其它的问题:onload 事件以及连接池(connection pool)。
Iframes 阻塞页面加载
  及时触发 window 的 onload 事件是非常重要的。onload 事件触发使浏览器的 “忙” 指示器停止,告诉用户当前网页已经加载完毕。当 onload 事件加载延迟后,它给用户的感觉就是这个网页非常慢。window 的 onload 事件需要在所有 iframe 加载完毕后(包含里面的元素)才会触发。在 Safari 和 Chrome 里,通过 JavaScript 动态设置 iframe 的 SRC 可以避免这种阻塞情况。
1、在项目中原本是用IE的最简单的赋值语句在IE中切换iframe可以正常使用,但是不兼容chrome。

document.all("frmPage").style.height = document.body.scrollHeight;

2、接着我尝试将赋值语句变为函数,但仍然不兼容

    function setIframeAutoAdaption(){  
        var $iframe = window.parent.$("#frmPage");  
        var height = $(document.body).height() + 20  
        $iframe.height(height);  
    }  

3、最后我花费了大约两天时间,查了很多资料,也发现是由于iframe页面中有浮动图表无法撑开body元素,导致(document.body)无法撑开body元素,无法获取body元素的总高度,最后修改了iframe高度获取方式为‘html’,使得页面正常显示(本系列文章只兼容IE7安全模式和chrome49)。

    function setIframeAutoAdaption() {  
        console.log('setIframeAutoAdaption' + $(document.body).height());  
        var navigatorName = "Microsoft Internet Explorer";  
        iframe = document.getElementById('frmPage');  
        var height  
        if (navigator.appName == navigatorName) {//IE  
            height = $(document.body).height() + 20;  
        } else {//chrome  
            height = $('html').height() + 20;  
        }  
        var $iframe = window.parent.$("#frmPage");  
        $iframe.height(height);  
    }  

并且将原来代码中重复调用了两次函数修改为调用一次,将函数放在初始化的页面的开始位置。
另附上javascript和jQuery获取高度宽度的方法

    javascript:  
    <pre code_snippet_id="2356829" snippet_file_name="blog_20170426_4_5242604" name="code" class="javascript">网页可见区域宽[仅针对body]: document.body.clientWidth  
    网页可见区域高[仅针对body]: document.body.clientHeight  
    网页可见区域宽[仅针对body]: document.body.offsetWidth (包括滚动条和边框,若滚动条和边框为0,则和clientWidth相等)  
    网页可见区域高[仅针对body]: document.body.offsetHeight (包括滚动条和边框,若滚动条和边框为0,则和clientHeight相等)  
    可视窗口宽度(包括滚动轴宽度):window.innerWidth; //IE9+、Chrome、Firefox、Opera 以及 Safari  
    可视窗口高度,不包括浏览器顶部工具栏: window.innerHeight;//IE9+、Chrome、Firefox、Opera 以及 Safari  
    网页正文全文宽(不包括滚动轴的宽度): document.body.scrollWidth  
    网页正文全文高:document.body.scrollHeight  
    //假如网页中没有滚动轴,document.body.scrollWidth和window.innerWidth相等,document.body.scrollHeight和window.innerHeight相等。  
    网页被卷去的高: document.body.scrollTop  
    网页被卷去的左: document.body.scrollLeft  
    网页正文部分上: window.screenTop  
    网页正文部分左: window.screenLeft  
    屏幕分辨率的高(整个屏幕的高度): window.screen.height  
    屏幕分辨率的宽(整个屏幕的宽度): window.screen.width  
    屏幕可用工作区高度: window.screen.availHeight  
    屏幕可用工作区宽度: window.screen.availWidth  
    整个浏览器可用工作区高度: window.outerHeight  
    整个浏览器可用工作区宽度: window.outerWidth</pre>jquery:<pre code_snippet_id="2356829" snippet_file_name="blog_20170426_5_6821948" name="code" class="javascript">alert($(window).height());                           //浏览器当前窗口可视区域高度  
    alert($(document).height());                        //浏览器当前窗口文档的高度  
    alert($(document.body).height());                //浏览器当前窗口文档body的高度  
    alert($(document.body).outerHeight(true));  //浏览器当前窗口文档body的总高度 包括border padding margin  
    alert($(window).width());                            //浏览器当前窗口可视区域宽度  
    alert($(document).width());                        //浏览器当前窗口文档对象宽度  
    alert($(document.body).width());                //浏览器当前窗口文档body的宽度  
    alert($(document.body).outerWidth(true));  //浏览器当前窗口文档body的总宽度 包括border padding margin</pre><pre code_snippet_id="2356829" snippet_file_name="blog_20170426_5_6821948" name="code" class="javascript">跨浏览器取得窗口左边和上边的位置:</pre><pre code_snippet_id="2356829" snippet_file_name="blog_20170426_5_6821948" name="code" class="javascript"><pre code_snippet_id="2356829" snippet_file_name="blog_20170426_5_6821948" name="code" class="javascript">var leftPos = (typeof window.screenLeft == "number") ?  
    window.screenLeft : window.screenX;  
    var topPos = (typeof window.screenTop == "number") ?  
    window.screenTop : window.screenY;</pre><br>  
    <br>  
    <pre></pre>  
    <pre></pre>  
    <pre></pre>  
    <pre></pre>      
    </pre>  
相关标签: 浏览器 兼容性

上一篇:

下一篇: