【问题标题】:How to modify following jQuery function to detect iframe height?如何修改以下 jQuery 函数来检测 iframe 高度?
【发布时间】:2011-11-05 10:02:26
【问题描述】:

我在我的网站上使用 facebook 评论插件。它隐藏在一个 div 中。

<div style="display: none" id=cmbx(id) class="comentBox">

  <div class="fb-comments" data-href="mywebsite.com(id)" data-num-posts="5" data-width="520"></div>  

</div> 

这是 facebook cmets javascrip 部分

<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) {return;}
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=143512332326919";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

有一个 jquery 函数显示隐藏的 .commentBox div,一旦点击以下链接,它就会午餐

<a class="st_commentsa" href="#" onClick="return false" onMousedown="javascript:toggleSlideBox(\'cmbx(id)\');">Comments</a>

这是一个 jQuery 函数

function toggleSlideBox(x) {
    if ($('#' + x).is(":hidden")) {
        $(".comentBox").slideUp(200);
        $('#' + x).slideDown(200)
    } else {
        $('#' + x).slideUp(200)
    }
}

问题如下。一旦隐藏的 div 得到扩展,facebook cmets 下会有很多空间不应该存在,我猜这是造成的,因为 jquery 函数不知道 facebook iframe 的高度。你能建议任何 可以解决此问题的解决方案/修改?

您可以在这里自己查看问题:http://inelmo.com/inelmo(点击帖子下的几个 cmets 链接以打开隐藏的 div。)

注意:我在几个浏览器中测试过,FireFox 工作正常,问题出现在 chrome、safari 和 IE 中,不确定 Opera。

【问题讨论】:

    标签: jquery facebook detect facebook-comments


    【解决方案1】:

    这可能有点老套,但应该可以。 (无法测试)。

    问题似乎是你的 iframe 决定它的高度比它需要的高大约 400px 出于某种原因。这可能是 Facebook 的问题。

    您可以在页面加载时手动将 iframe 的高度设置为“自动”。

    $(document).ready(function() {
       $(".fb-comments iframe").css("height", "auto");
    });
    

    我无法对此进行测试,但有在 chrome 中编辑 DOM 的概念证明。

    ---下面的编辑代码---

    $(".fb-comments iframe").css("height", function() {
        $(this).contents().find("body").height();
    });
    

    希望这将通过将 iframe 高度设置为其内容的高度来解决问题。同样,不知道上面的结果会如何。 auto 属性似乎没有像普通的 html 元素那样扩展 iframe 以匹配其内容。 将代码保留在 Comment Click 事件中。

    我认为这可能会导致另一个问题,即当 iframe 的内容发生变化时(因为当有人添加评论时它们必然会发生变化),iframe 不会扩展。所以我们现在已经到了必须不断监控 iframe 的内容并将它们应用到 iframe 本身的阶段,这似乎太复杂了,但我想不出更简单的方法。

    我快速搜索了一下,看看是否有人有更聪明的方法来扩展 iframe 以匹配其内容,但看不到。但这似乎是您现在真正的问题,因为我们已经对其进行了调查。

    【讨论】:

    • 嗨,我明白了,我在切换功能之前添加了这段代码(在头部标签中),但它似乎不起作用。当你说你在 chrome 中 eddied the doom 时,它意味着什么? (刚开始从事网络开发 :))如果有机会,您能再次访问我的页面吗?我会将您的代码留在那里,如果可以,请告诉我我是否将其放置在正确的位置?
    • 啊。我想我在这里看到了问题。我的代码在加载后立即在页面上搜索 iframe,但是在我们尝试查找和更改高度之后,facebook 脚本会在某个未确定的点转换/添加 iframe。因此,在加载并运行 facebook 脚本之前,我们什么都找不到。我们可能需要做的是在 facebook 之后以某种方式调用我的代码。然而,将我的代码绑定到一个按钮而不是 document.ready 可能是一个想法,只是为了确保它确实可以工作!
    • 说让它在点击“评论”按钮后运行代码?
    • Hell yeh dude ;D 我将它添加为切换功能的一部分,现在它可以完美运行,谢谢 )))
    • 但是,有一个问题,它扩展到正常高度,如果我再次隐藏它然后再次显示它,它有某种默认高度?如果您查看我在其中添加了几个 cmets 的网站,打开任何文章的 cmets 将它们关闭并再次打开,它们将具有不同的高度。
    猜你喜欢
    • 2011-12-10
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多