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循环结束。 我真的不知道哪一个更好/更快,但我确信最下面的那个会工作。
你已经使用类似的方法,像我用setTimeout,设置timeInterval将调用函数200ms,但在此之前的代码将执行。我只想让代码停在那里。当FB设置时,我应该继续下一行。 – lokeshjain2008 2013-05-08 10:44:44
的确,功能是一样的,但如果调用递归需要很长时间,则可以通过某些浏览器将其检测为错误脚本。 我有很多使用IE的经验。 SetInterval曾经工作,但正如我指出的,我没有测试过。 至于另一个,我已经在一个项目中使用它,它确实工作。 然而,我有一个脚本将我的所有javascripts合并到一个文件中,然后再渲染我的项目,所以这可能是问题所在? – 2013-05-08 13:37:01
是的,您正确地调用递归在这种情况下不是一个好习惯。无论如何,我把我所有的代码放在“check_FB_variable”函数中,所以它为我解决了这个问题。我认为如果传递一个回调函数将会很好。希望有人想出更好的解决方案。 – lokeshjain2008 2013-05-08 17:40:31