JavaScript与Facebook JavaScript SDK的递归错误

问题描述:

我正在向FB发送FB.login请求。但FB没有定义,而JavaScript SDK仍在加载核心JavaScript资源。JavaScript与Facebook JavaScript SDK的递归错误

于是,我把支票拿到FB变量

function check_FB_variable(){ 
      if(typeof FB=='undefined'){ 
       check_FB_variable(); 
      }else{} 
      } 
      check_FB_variable(); 

但是这种做法给了我太多的递归错误。

于是,我把这个代码

function check_FB_variable(){ 
      if(typeof FB=='undefined'){ 
       setTimeout(check_FB_variable,600); 
      }else{} 
      } 
      check_FB_variable(); 

但在这种方法中,前超时功能拨打电话功能向下移动,并给出错误 没有定义的FB.login。

请帮忙。

我用过类似的东西来检查JQMobi是否存在,我不知道为什么,但我认为抛出异常是因为你每次调用指向函数的指针。

你应该尝试检查这样的时间间隔(未测试): var facebookChecker = window.setInterval(fbCheck,200);

var fbCheck = function() { 
    if (typeof FB != 'undefined' && facebookChecker != null) { 
     window.clearInterval(facebookChecker); 
     facebookChecker = null; 

     // Whatever you want to do if facebook is loaded 
     // Example: InitFBLogin(); 
    } 
} 

或者你可以使用一个while语句(我用了一个):

/* 
* This JQ Fix tries to attach Jquery to a variable to ensure it exists. 
* - Marvin Brouwer. 
*/ 

var FixJQ = function() { 
    var JQFIX = null; 
    while (!JQFIX || JQFIX == null) { 
     try { 
      JQFIX = jQuery; 
     } catch (nothing) { jQuery = $; }; 
    }; 
    JQFIX = null; 
    return true; 
}; 

if (FixJQ()) { 
    FixJQ = null; 
}; 

的最后一个好处是,你可以把你下一步低于这个,因为它会等到while循环结束。 我真的不知道哪一个更好/更快,但我确信最下面的那个会工作。

+0

你已经使用类似的方法,像我用setTimeout,设置timeInterval将调用函数200ms,但在此之前的代码将执行。我只想让代码停在那里。当FB设置时,我应该继续下一行。 – lokeshjain2008 2013-05-08 10:44:44

+0

的确,功能是一样的,但如果调用递归需要很长时间,则可以通过某些浏览器将其检测为错误脚本。 我有很多使用IE的经验。 SetInterval曾经工作,但正如我指出的,我没有测试过。 至于另一个,我已经在一个项目中使用它,它确实工作。 然而,我有一个脚本将我的所有javascripts合并到一个文件中,然后再渲染我的项目,所以这可能是问题所在? – 2013-05-08 13:37:01

+0

是的,您正确地调用递归在这种情况下不是一个好习惯。无论如何,我把我所有的代码放在“check_FB_variable”函数中,所以它为我解决了这个问题。我认为如果传递一个回调函数将会很好。希望有人想出更好的解决方案。 – lokeshjain2008 2013-05-08 17:40:31