如何解决我在加载Facebook javascript-sdk时遇到的错误?

时间:2013-03-20 08:20:07

标签: javascript facebook facebook-javascript-sdk

我使用以下代码将Facebook javascript sdk加载到我的页面中: -

           (function() {
            console.log('Hello World! From self executing function.'); 
            var e = document.createElement('script');
            e.async = true;
            e.type = 'text/javascript';
            e.src = document.location.protocol +  '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
            console.log('javascript sdk is appended into the fb-root element of the page.');
        }());

它正在正确加载,但我在控制台中收到以下错误: -

  Error: Permission denied to access property 'toString'
  [Break On This Error]     

   ...5(i(ca.getElementsByTagName('*')),'forEach',true,function(ka){if(!ea&&ka.getAttr...

如何解决这个问题?

谢天谢地收到任何帮助?

1 个答案:

答案 0 :(得分:4)

Facebook javascript SDK通常会导致跨浏览器问题。为了解决这个问题,facebook本身已经集成了一个方法,即在FB.init()函数中添加一个通道url。

window.fbAsyncInit = function() {
// init the FB JS SDK
FB.init({
  appId      : 'YOUR_APP_ID', // App ID from the App Dashboard
  channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain communication
  status     : true, // check the login status upon init?
  cookie     : true, // set sessions cookies to allow your server to access the session?
  xfbml      : true  // parse XFBML tags on this page?
});

// Additional initialization code such as adding Event Listeners goes here

 };

添加频道文件可解决跨浏览器问题。

channel.html文件的内容应该只有一行:

<script src="//connect.facebook.net/en_US/all.js"></script>

FB.init()中的channelUrl参数是可选的,但强烈建议使用。提供频道文件有助于解决三个特定的已知问题。

  • 包含跨框架通信代码的页面可能会导致社交 没有channelUrl的插件显示为空白。
  • 如果没有提供channelUrl且页面包含自动播放音频 或者视频,用户可以听到两个音频流,因为页面有 已在背景中第二次加载跨域 通讯。
  • 频道文件会阻止您的额外点击 服务器端日志。如果您没有指定channelUrl,则应该 删除包含fb_xd_bust或fb_xd_fragment参数的页面视图 从您的日志中确保正确计数。

channelUrl必须是与您包含SDK的网页相匹配的完全限定网址。换句话说,如果您的网站使用www提供,则频道文件域必须包含www,如果您在网页上修改document.domain,则必须在channel.html文件中进行相同的document.domain更改。

https://developers.facebook.com/docs/reference/javascript/