【问题标题】:Responsive FB Page Plug-In with auto browser refresh JavaScript具有自动浏览器刷新 JavaScript 的响应式 FB 页面插件
【发布时间】:2017-08-18 18:31:22
【问题描述】:

我正在尝试在我的网站上嵌入一个具有完全响应行为的 Facebook 页面插件。基本上,我只希望它的宽度在不同的浏览器尺寸下发生变化;当浏览器为 480 或更窄时为 480px;当 481

我意识到这个问题has been asked here before,但是由于 FB 的更改,以前的答案要么不再起作用,要么要求用户刷新他们的浏览器窗口。但是在this blog post 上,我找到了一个功能齐全的响应式FB Page 插件的实际示例;当调整浏览器窗口的大小时,它会即时更改大小和其他特征。

博客文章提到了他们使用的 JavaScript,以及一个指向您可以在其中看到它的网站的链接。但是他们没有提供所有涉及的 CSS 和 HTML 的精简摘要,而且他们网站上的代码对于我的新手来说有点复杂。我尝试将他们的 JavaScript 添加到我的网站,但由于某种原因它对我不起作用。当您更改浏览器宽度时,我的 DIV #fbsection 会很好地调整其宽度,但其中的 DIV .fb-page 只有在您刷新时才会更改。

我使用他们的响应式模板在 Dreamweaver CS 6 中创建了我的网站,它包含了他们的样式表 boilerplate.css 和 JavaScript respond.min.js。相关代码如下:

(来自 HTML 文档)

    <link href="boilerplate.css" rel="stylesheet" type="text/css">
    <link href="bluedolphin.css" rel="stylesheet" type="text/css">
    <script src="respond.min.js"></script>
</head>
<body bgcolor="#FFFFFF">
       <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/sdk.js#xfbml=1&version=v2.10";
              fjs.parentNode.insertBefore(js, fjs);
            }(document, 'script', 'facebook-jssdk'));



        $(window).on('resize', function() {


setTimeout(function(){CMSSpace.changeFBPagePlugin()}, 500);
});

$(window).on('load', function() {
   setTimeout(function(){CMSSpace.changeFBPagePlugin()}, 1500);
});

CMSSpace.changeFBPagePlugin = function () {
   //getting parent box width
   var container_width = (Number($('.fb-column').width()) - Number($('.fb-column').css('padding-left').replace("px", ""))).toFixed(0);
   //getting parent box height
   var container_height = (Number($('.fb-column').height()) - (Number($('.fb-column-header').height()) + Number($('.fb-column-   header').css('margin-bottom').replace("px", "")) + Number(($('.fb-column').css('padding-top').replace("px", "")*2)))).toFixed(0);
   if (!isNaN(container_width) && !isNaN(container_height)) {
      $(".fb-page").attr("data-width", container_width).attr("data-height", container_height);
   }
   if (typeof FB !== 'undefined' ) {
      FB.XFBML.parse();
   }
}


            </script>

(也在 HTML 文档中)

    <div id= "fbsection"> 
                 <h1>Facebook</h1>  
                 <p class="centered"><a href="https://www.facebook.com/pg/bluedolphinbodywork/">Like my Page</a> for the chance to be notified when I post special offers there, and please Invite your Facebook Friends, too! </p>

                     <div class="fb-page" style="max-width:300px; margin:auto;"
                         data-href="https://www.facebook.com/bluedolphinbodywork" 
                         data-tabs="timeline" 
                         data-small-header="false" 
                         data-adapt-container-width="true"
                         data-height="1000" 
                         data-width="300" 
                         data-hide-cover="false" 
                         data-show-facepile="true"> 
                            <div class="fb-xfbml-parse-ignore">
                              <blockquote cite="https://www.facebook.com/bluedolphinbodywork" class="fb-xfbml-parse-ignore">
                              <a href="https://www.facebook.com/bluedolphinbodywork">Blue Dolphin Bodywork</a>
                              </blockquote>
                            </div>
                        </div>
                  </div>

我的样式表中的相关片段 bluedolphinbodywork.css

#fbsection {
    display: block;
    margin-left: auto;
    margin-right: auto;
    max-width:480px;
    vertical-align:top;
    margin-bottom:5px;
    padding-bottom:5px;
    position: relative;
}

@media only screen and (min-width: 481px) {

#fbsection {
    display:inline-block;
    max-width:250px;
    }

@media only screen and (min-width: 732px) {

#fbsection {
    max-width:300px;
}

我做错了什么? 感谢所有回复。

【问题讨论】:

  • 一个没有任何媒体查询的工作jsfiddle

标签: javascript html css facebook


【解决方案1】:

我定制了解决方案以满足我的需求,因为我只需要调整宽度并简化解决方案如下:

function resizeFBPlugin(){
    //getting parent box width
    var container_width = ($('.fb-column').width() - parseInt($('.fb-column').css('padding-left'))).toFixed(0);

    if (!isNaN(container_width)) {
        $(".fb-page").attr("data-width", container_width);
    }
    if (typeof FB !== 'undefined' ) {
        FB.XFBML.parse();
    }
}

HTML 代码。确保您的小部件使用类 fb-column 或任何您选择的类名称包装在 div 下。

    <div class="fb-column">
      <div class="fb-page" data-href="https://www.facebook.com/facebook" data-tabs="timeline" data-small-header="true" data-width="500" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true"><blockquote cite="https://www.facebook.com/facebook/" class="fb-xfbml-parse-ignore"> <a href="https://www.facebook.com/facebook/">Facebook/a></blockquote></div>
    </div>

然后您可以在窗口加载和调整大小时运行 resizeFBPlugin 函数。祝你好运!

【讨论】:

    【解决方案2】:

    这里的代码:

    $(window).on('load', function() {
    

    是 jQuery 的代码。 $ 是加载时 jQuery 本身的别名。在您的网站上,尚未正确加载 jQuery。如果你得到它,你应该在头部添加这样的东西locally from here

    <script src="jquery-3.2.1.min.js"></script>
    

    有关 $ 的更多信息: How does jQuery achieve making $ an alias for the jQuery function?

    你也可以这样写:

    jQuery(window).on('load', function() {
    

    正确加载后。

    各种第三方托管的 jQuery 都可以使用,请参见此处:https://code.jquery.com/(我不确定哪个版本最好,但我认为 2.x 可能会起作用)

    例如:

    <script
      src="https://code.jquery.com/jquery-2.2.4.min.js"
      integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
      crossorigin="anonymous"></script>
    

    密切关注控制台日志以了解更多 Javascript 错误和通知。有些可能不是实际的中断错误,但在这种情况下,您会看到 $ 未定义,这会阻止加载主要内容。

    【讨论】:

      【解决方案3】:

      在原始博客文章中看到了您的文章。提供的示例代码中有一个错字,如果未捕获或您不熟悉语法,将导致类型错误。这对我有用,为方便起见,嵌入了所有脚本和样式。我删除了他们为其添加的标题,但您可以轻松地将其重新添加(只需确保将您的样式中的 .fb-column- header 更改为 .fb-column-header)。

      另外,YOURPAGE 本来是一个占位符,但看起来确实有人拥有那个 URL,所以为这个奇怪的光着膀子的家伙道歉。

      <!DOCTYPE html>
      <html>
      
      <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>Page Title</title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
        <script>
          var CMSSpace = CMSSpace || {};
        </script>
        <style>
          .fb-column {
            height: 550px;
            min-height: 550px;
          }
        </style>
      </head>
      
      <body>
        <div id="fb-root"></div>
        <script async defer src="https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.2"></script>
        <div class="fb-column">
          <div class="fb-page" data-href="https://www.facebook.com/YOURPAGE" data-tabs="timeline" data-small-header="false" data-adapt-container-width="true" data-hide-cover="false" data-show-facepile="true">
            <blockquote cite="https://www.facebook.com/YOURPAGE" class="fb-xfbml-parse-ignore"><a href="https://www.facebook.com/YOURPAGE">YOUR PAGE NAME</a></blockquote>
          </div>
        </div>
        <script>
          $(window).on('resize', function() {
            setTimeout(function() {
              CMSSpace.changeFBPagePlugin()
            }, 500);
          });
      
          $(window).on('load', function() {
            setTimeout(function() {
              CMSSpace.changeFBPagePlugin()
            }, 1500);
          });
        </script>
        <script>
          CMSSpace.changeFBPagePlugin = function() {
            //getting parent box width
            var container_width = (Number($('.fb-column').width()) - Number($('.fb-column').css('padding-left').replace("px", ""))).toFixed(0);
            //getting parent box height
            var container_height = (Number($('.fb-column').height()) - (Number(($('.fb-column').css('padding-top').replace("px", "") * 2)))).toFixed(0);
            if (!isNaN(container_width) && !isNaN(container_height)) {
              $(".fb-page").attr("data-width", container_width).attr("data-height", container_height);
            }
            if (typeof FB !== 'undefined') {
              FB.XFBML.parse();
            }
          }
        </script>
      </body>
      
      </html>
      

      【讨论】:

        【解决方案4】:

        我已将其改编成更简单的代码,希望对您有所帮助。

        您需要做的就是照常集成您的 Facebook 提要,将 fb-container 类添加到父 div 标签并确保已加载 jQuery。

        你需要的代码是:

        //Make Facebook Feed Responsive 100% Height
        $(window).on('resize', function () {
            setTimeout(function () { changeFBPagePlugin(); }, 500);
        });
        
        $(window).on('load', function () {
            setTimeout(function () { changeFBPagePlugin(); }, 1500);
        });
        
        changeFBPagePlugin = function () {
            var container_width = Number($('.fb-container').width()).toFixed(0);
            var container_height = Number($('.fb-container').height()).toFixed(0);
            if (!isNaN(container_width) && !isNaN(container_height)) {
                $(".fb-page").attr("data-width", container_width).attr("data-height", container_height);
            }
            if (typeof FB !== 'undefined') {
                FB.XFBML.parse();
            }
        };
        

        我将它与 Bootstrap 网站一起使用,其中提要位于 col-md 列内,无论大小如何,它总是填满整个高度。

        【讨论】:

          【解决方案5】:

          虽然理论上应该可以做你想做的事,但事实证明这对我今晚的工作来说是一个太大的挑战。到目前为止,如果您的网页设计可以使 facebook 插件保持恒定宽度,那么您不必尝试刷新它以使其具有响应性。

          【讨论】:

            猜你喜欢
            • 2013-09-08
            • 1970-01-01
            • 2011-03-19
            • 1970-01-01
            • 1970-01-01
            • 2021-04-05
            • 2015-02-26
            • 2023-03-12
            • 2021-01-13
            相关资源
            最近更新 更多