javascript - 无法从 JavaScript 的 iframe 中使用的内部页面获取正确的高度

标签 javascript jquery html css iframe

我正在从事一个网络元素,该元素需要将另一个网络显示到 iframe 中。我阅读了 POSTMESSAGE javascript 方法,以便告诉页面容器(具有 <iframe> 标记的容器)iframe 中使用的页面高度。

问题很简单。当我在新标签页(将在 iframe 中加载的标签页)加载“内部页面”时,我尝试获取文档的高度,然后我得到“380”作为值,这我认为是正确的,但未加载到 iframe 中。

window.onload() event on internal page

另一方面,当我尝试从“容器页面”(具有 iframe 标记的页面)呈现 iframe 并检查同一脚本(在“内部页面”中运行)中发生的情况时,我始终获得 150px 的值。 见下图:

enter image description here

我真的不知道这个值是从哪里来的,但是当您将它放在 iframe 中时,我无法弄清楚如何获得正确的值。

我做错了什么?有什么想法吗?

编辑

我忘了说我是基于以下 URL 使用这种方法的: http://michilehr.de/resize-iframe-by-its-content-cross-domain/

最佳答案

您帖子中解释 postMessage 事件机制的链接几乎是正确的。它的示例代码适用于 Firefox 和 IE,但不适用于 Chrome。但实际上,您需要做的就是将 iframe 源代码中的 document.body.scrollHeight 替换为 document.documentElement.offsetHeight,然后它就可以跨浏览器兼容了。

因此,举个例子,iframe 可以说

<!DOCTYPE html>
<html>
 <head>
  <meta charset="UTF-8">
  <title>the frame</title>
  <script>
   window.onload = function() {
    // post our message to the parent
    window.parent.postMessage(
     // get height of the content
     document.documentElement.offsetHeight
     // set target domain
     ,"*"
    )
   };
  </script>
 </head>
 <body>
  <p>See the frame. It is the correct height.</p>
 <body>
</html>

和父页面

// browser compatibility: get method for event 
// addEventListener(FF, Webkit, Opera, IE9+) and attachEvent(IE5-8)
var myEventMethod =
  window.addEventListener ? "addEventListener" : "attachEvent";
// create event listener
var myEventListener = window[myEventMethod];
// browser compatibility: attach event uses onmessage
var myEventMessage =
  myEventMethod == "attachEvent" ? "onmessage" : "message";
// register callback function on incoming message
myEventListener(myEventMessage, function(e) {
  // we will get a string (better browser support) and validate
  // if it is an int - set the height of the iframe #my-iframe-id
  if (e.data === parseInt(e.data))
    document.getElementById('my-iframe-id').height = e.data + "px";
}, false);
iframe {
  border: 2px inset #FF8000;
  width: 100%
}
<iframe id="my-iframe-id" src="http://temp.strictquirks.nl/daframe.html">
  ?</iframe>

这将适用于所有现代浏览器。

关于javascript - 无法从 JavaScript 的 iframe 中使用的内部页面获取正确的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515038/

相关文章:

html - 当 div 超过 100% 时,CSS 会忽略 margin-right

javascript - 模板未定义 - Meteor

javascript - 在 ES6 中创建带箭头或不带箭头的顶级函数的优缺点是什么?

javascript - 根据页面组织 javascript 代码

javascript - 在 CSS3 中创建这个形状作为下拉 div

html - Bootstrap <select> 宽度,调整窗口大小时内容太宽

javascript - ajax POST 不发送对象的一部分

javascript - 带模板的字符串,动态变量

jquery - 在某些情况下,单击按钮标签不会触发输入单击

javascript - 如何控制 jquery 验证错误消息