1

我只在 Chrome 中收到此消息。Firefox 工作得很好。我一直在调试,试图找出这个错误发生在什么时候,似乎无法确定。确切的消息是 all.js:57 中的“Uncaught TypeError: Cannot call method 'shift' of null”。

另外,我会注意一些其他可能对您有所帮助的事情:

  • 我将 SDK 作为 requirejs 模块加载。我也尝试过以“正常方式”加载它,但结果是一样的。
  • 它不会在本地发生,仅在我们的登台服务器上发生。这让我觉得它在 SDK 加载期间有一些延迟。
  • 它只发生在 Chrome 中。Firefox 和 Safari 一样好用。Safari 中的唯一区别是我看到一个类似的错误,指出这是一个类型问题。那里的消息“'null'不是对象(评估'queue.shift`)”@ debug.js:2712 但它不会破坏应用程序。

这里的任何帮助和/或见解都会很棒。

4

4 回答 4

1

重写调用 SDK 脚本对我有帮助。需要调用它,因为它在 facebook上进行了解释。

首先,我尝试使用 id='fasebook-jssdk' 简单地将脚本附加到 head 元素,但是方法 'shift' 发生错误。然后我按照 facebook 的推荐重写了它,没有 FB.init()。但是错误一直在发生,直到我添加了 FB.init() 调用。现在它工作正常。

试图解决它,我发现了一个调试版本的 'all.js'文件,我发现错误出现在以下代码中:

function flush() {
  if (!queue) {
    return;
  }

  var fn;
  while (fn = queue.shift()) {
    fn();
  }
  queue = null;
}

其中 queue 是一个函数数组。我不知道原因,但是现在,当脚本正常时,我真的不需要。也许比我更谨慎的人会发现。

于 2013-12-01T19:45:03.900 回答
1

我有一个类似的问题。如果对我来说,这解决了。这些是症状:

  1. 本地主机上没有问题
  2. 在服务器 (Amazon S3) 上偶尔会出现“未捕获的类型错误:无法调用 null 的方法‘shift’”

解决方案:

我弄乱了 Facebook SDK 的包含顺序和 fbAsyncInit 的处理程序。在包含用于处理 SDK 加载的脚本之后,您应该包含 SDK。否则,SDK 可能会在其加载事件的处理程序注册之前加载。

<script src="Your script with fbAsyncInit here"> </script>
   <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=200817623450198";
      fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', 'facebook-jssdk'));
    </script>
  <div id="fb-root"></div>
  </body>
于 2014-07-17T06:14:35.450 回答
0

这些Facebook 说明解释了调用 SDK 的不同方式,这对我有用。我还没有测试过,但我觉得频道文件会让你在本地测试这个,超级甜。

<div id="fb-root"></div>
<script>
  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

  };

  // Load the SDK's source Asynchronously
  // Note that the debug version is being actively developed and might 
  // contain some type checks that are overly strict. 
  // Please report such bugs using the bugs tool.
  (function(d, debug){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";
     ref.parentNode.insertBefore(js, ref);
   }(document, /*debug*/ false));
</script>
于 2013-02-26T14:29:29.167 回答
0

抱歉,我可以提供很多帮助,但我有同样的问题,可能有助于解决问题。

像这样加载 JS:

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

“这不是在本地发生的,只在我们的登台服务器上发生。这让我认为它在 SDK 加载期间有一些延迟。”

我倾向于同意。该错误似乎只是偶尔发生。此外,我偶尔会收到 CURLOPT_IPRESOLVE 未定义错误。似乎都与连通性有关。

于 2013-01-31T03:50:18.880 回答