开发者

Facebook Like button sometimes appears sometimes not

I have strange issue with like buttons on my site. When I enter a page it shows up correctly, than after refresh it doesn't appears and I have javascript error

FB.provide is not a function
[Break on this error] FB.provide('Array',{indexOf:function(a...|c.hasOwnProperty(d))a(c[d],d,c);}});

Initialization and asynchronous including of js looks like this

<body>
            <div id="fb-root"></div>
            <script type="text/javascript">
              window.fbAsyncInit = function() {
                FB.init({appId: 'fffffffffffffffffffffffffffffff', status: true, cookie: true, xfbml: true});
              };
              (function() {
                var e = document.createElement('script');
                e.type = 'text/javascript';
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
              }());
            </script>

And heres the input code of like and share buttons:

<fb:like href="<%= link -%>" layout="button_count" font="arial"></fb:l开发者_如何学Pythonike>

<a title="Share" name="fb_share" type="button_count" share_url="<%= link -%>" href="http://www.facebook.com/sharer.php">Share</a><script src="http://static.ak.fbcdn.net/connect.php/js/FB.Share" type="text/javascript"></script>

Any ideas ?


I found that order also matters, so when loading files dynamically, all.js should be loaded before FB.share js

<script type="text/javascript">
              window.fbAsyncInit = function() {
                FB.init({appId: 'xxxxxxxxxxxxxxxxxxxxxxx', status: true, cookie: true, xfbml: true});
              };
              (function() {
                var e = document.createElement('script');
                e.type = 'text/javascript';
                e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
                e.async = true;
                document.getElementById('fb-root').appendChild(e);
              }());

              $(document).ready(function(){
                var s = document.createElement('script');
                s.type = 'text/javascript';
                s.src = 'http://static.ak.fbcdn.net/connect.php/js/FB.Share';
                s.async = true;
                document.getElementById('fb-root').appendChild(s);
              });

            </script>


I think I found the solution.

When I loaded the all.js file the way you did, I also had a problem, but when I downloaded all.js manually and copied it somewhere on the site. After that, loading it through the script tag made this problem went away.


After you are done with placing your html in DOM, just call window.fbAsyncInit();.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜