浏览器兼容问题项目总结(六) 页面嵌套多个iframe滚动条兼容性修改
2017-08-22 14:03
495 查看
本文转自: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。
2、接着我尝试将赋值语句变为函数,但仍然不兼容
3、最后我花费了大约两天时间,查了很多资料,也发现是由于iframe页面中有浮动图表无法撑开body元素,导致(document.body)无法撑开body元素,无法获取body元素的总高度,最后修改了iframe高度获取方式为‘html’,使得页面正常显示(本系列文章只兼容IE7安全模式和chrome49)。
并且将原来代码中重复调用了两次函数修改为调用一次,将函数放在初始化的页面的开始位置。
另附上javascript和jQuery获取高度宽度的方法
最近几天一直在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>
相关文章推荐
- 浏览器兼容问题项目总结(六) 页面嵌套多个iframe滚动条兼容性修改
- 浏览器兼容问题项目总结(四) 页面的最小宽度的设定
- 浏览器兼容问题项目总结(七)IE下未初始化为空,chrome下未初始化生产大量空格
- 浏览器兼容问题项目总结(一)浏览器
- bootstrap多个模态框嵌套显示,造成的遮罩颜色加深和页面滚动条问题
- 浏览器兼容问题项目总结(五)table中td和li高度问题
- 解决IDEA开发JavaWeb项目修改了HTML或Servlet/JSP后刷新浏览器无法及时显示修改后的页面的问题
- 完美解决 IOS系统safari5.0 浏览器页面布局iframe滚动条失效问题
- 浏览器兼容问题项目总结(三)事件处理机制
- 浏览器兼容问题项目总结(二)Highchart 在chrome下x轴文字竖直显示(兼容IE和Chrome)
- 完美解决 IOS系统safari5.0 浏览器页面布局iframe滚动条失效问题,iossafari5.0
- 兼容多浏览器的iframe高度自适应问题
- js浏览器兼容问题总结及解决办法
- js控制 页面刷新,但滚动条位置不变 浏览器兼容
- vs 示例代码浏览器 下载项目 兼容问题
- 兼容所有浏览器复制问题总结
- 浏览器对DIV+CSS兼容性问题大总结
- B/S项目中需要考虑系统对各种浏览器的兼容问题
- 原创,真正解决iframe高度自适应的问题.兼容各浏览器
- 浏览器对DIV+CSS兼容性问题大总结