【问题标题】:When to call Javascript for ScrollHeight何时为 ScrollHeight 调用 Javascript
【发布时间】:2014-12-20 14:33:08
【问题描述】:

我有一个带有 iframe 的页面。这两个站点(父站点是 php,子站点是 asp.net 2.0)位于不同的域上,尽管我控制它们。大部分工作都是在 iframe 内完成的。我正在使用 postMessage 函数发送有关 iframe 中内容的总高度的信息。但是,它总是显示为 0,我猜是因为脚本在所有内容都显示在屏幕上之前执行。有没有办法获得子站点的总高度(我认为是 scrollHeight,对吗?),以便我可以将其发送给父站点?

谢谢!

【问题讨论】:

  • 有人在上面写了一篇文章LINK。希望这可以帮助。否则尝试在“文档就绪”中添加监听器LINK
  • 那篇文章实际上让我开始了解这一切。但问题是我只在 iframe 中工作,在 iframe 中从一个页面移动到另一个页面。从父框架发送一条询问 iframe 大小的消息仅适用于包含 iframe 的页面的初始加载,除非我每次转到 iframe 中的另一个页面时都要求父框架刷新(我会而不是这样做)。
  • 所以你想听来自 iframe 的事件.. 有一个技巧。我把它写成答案,因为它太大了,无法评论
  • 我已经在父框架上有了一个监听器,我收到了消息。我的问题是 iframe 发送的值为 0。
  • 嗯。你确定你从触发器传递了正确的高度吗?像这样的'parent.$(parent.document).trigger("atriggerMessage", document.body.clientHeight);'那么你可以提取所需的高度并使用它......如果这也失败了,尝试制作一个 jsfiddle 会更容易调试

标签: javascript html asp.net iframe postmessage


【解决方案1】:

所以你希望父母在你得到另一个页面等时调整 iFrame 的大小。所以假设你使用 jquery 作为 JS 库你可以试试这个技巧。在 parent.html 中执行此操作

$(document).bind('atriggerMessage', function(e) {
      //do the iframe size change or other stuff
});

然后您需要在 iframe 内触发事件。所以在 iframe.html 中

parent.$(parent.document).trigger("atriggerMessage");

【讨论】:

    【解决方案2】:

    我想发布我的解决方案,以防其他人遇到同样的问题。

    我最终将 javascript 代码放在了 html 标记中,几乎就在结束标记之前。这确保了在调用 body.scrollHeight 之前页面是可见的。我不明白为什么 window.onload() 或 body.onload 或 $(document).ready() 内的 body.scrollHeight 就像@shakirthow 上面所说的那样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2020-01-02
      • 2019-11-18
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多