计算跨浏览器的iframe高度

Pie*_*igi 16 javascript iframe jquery

我的javascript体验中最困难的问题之一是iframe高度的正确(即"跨浏览器")计算.在我的应用程序中,我有很多动态生成的iframe,我希望它们都在load事件结束时进行一种自动调整以调整它们的高度和宽度.

高度计算的情况下,我的最佳解决方案是以下(在jQuery的帮助下):

function getDocumentHeight(doc) {
  var mdoc = doc || document;
  if (mdoc.compatMode=='CSS1Compat') {       
      return mdoc.body.offsetHeight;
  }
  else {
    if ($.browser.msie)
      return mdoc.body.scrollHeight;
    else  
      return Math.max($(mdoc).height(), $(mdoc.body).height());
  }
}
Run Code Online (Sandbox Code Playgroud)

我没有成功搜索互联网.我还测试了雅虎库,它有一些文档和视口尺寸的方法,但它并不令人满意.我的解决方案工作正常,但有时它会计算出更高的高度.我已经在Firefox/IE/Safari中研究并测试了大量有关文档高度的属性:documentElement.clientHeight, documentElement.offsetHeight, documentElement.scrollHeight, body.offsetHeight, body.scrollHeight, ... jQuery在各种浏览器中也没有连贯的行为$(document.body).height(), $('html', doc).height(), $(window).height()

我不仅在加载事件结束时调用上述函数,而且在动态插入DOM元素或隐藏或显示的元素的情况下也调用上述函数.这种情况有时会破坏仅在load事件中起作用的代码.

有人有真正的跨浏览器(至少是Firefox/IE/Safari)解决方案吗?一些提示或提示?

jim*_*jim 4

虽然我喜欢你的解决方案,但我总是发现 IFRAME 带来的麻烦超过了它们的价值。

为什么 ?1.尺寸问题。2. iframe 有 src 属性需要担心。即绝对路径。3. 页面的额外复杂性。

我的解决方案 - 通过 AJAX 调用动态加载的 DIV。DIV 将自动调整大小。尽管 AJAX 代码需要 JavaScript 工作(可以通过框架完成),但它们与站点所在的位置相关。3 是一种清洗,你将页面的复杂性换成了 JavaScript。

使用 <DIV id="mystuff" /> 代替 <IFRAME ...>

执行 ajax 调用以用数据填充 mystuff div 并让浏览器处理它。

  • 您无法从外部站点 AJAX 加载内容;这是浏览器安全违规(跨站点脚本)。&lt;iframes&gt; 可能是唯一允许加载外部内容的客户端解决方案。 (2认同)