Facebook FB.api('/ me')抛出:“TypeEror:'undefined'不是对象”

时间:2012-03-14 11:32:20

标签: javascript facebook web-applications mobile-safari

Facebook的FB.api( '/me' )功能最近开始在移动版Safari中运行时出现以下错误

  

TypeEror:' undefined'不是一个对象

代码在桌面浏览器中正常运行(在Chrome 19dev / OS X和Safari 5.1.3 / OS X中测试过)。我在两个不同的域上尝试了两个不同的Facebook应用ID,结果相同。我尝试了两个不同的Facebook用户ID,结果相同。我尝试使用FB.login()FB.getLoginStatus()进行身份验证,但没有任何区别。

演示:http://thinkingstiff.com/fb.htm

脚本:

window.onload = function () {

    var script = document.createElement( 'script' );
    script.async = true;
    script.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    document.getElementById( 'fb-root' ).appendChild( script );

    window.fbAsyncInit = function () {
        FB.init( {
            appId: '252706924818818',
            cookie: true,
            status: true,
            xfbml: true,
            oauth: true
        } );
    };

    function login1() {
        FB.login( function ( response ) {
            if ( response.authResponse ) {
                try {
                    FB.api( '/me', function ( response ) { // this line throws error
                        alert( 'success: ' + response.name );
                    } );
                } catch ( error ) {
                    alert( 'error: ' + error );
                };
            } else {
                alert( 'unauthorized' );
            };
        }, { scope: 'email' } );
    };

    function login2() {
        FB.getLoginStatus( function ( response ) {
            if ( response.authResponse ) {
                try {
                    FB.api( '/me', function ( response ) { // this line throws error
                        alert( 'success: ' + response.name );
                    } );
                } catch ( error ) {
                    alert( 'error: ' + error );
                };
            } else {
                alert( 'unauthorized' );
            };
        } );
    };

    function initialize() {
        document.getElementById( 'login1' ).addEventListener( 'click', login1, false );
        document.getElementById( 'login2' ).addEventListener( 'click', login2, false );
    };

    initialize();

};
​

HTML:

<button id="login1" class="fb-button">Login 1</button>
<button id="login2" class="fb-button">Login 2</button>
<div id="fb-root"></div>

2 个答案:

答案 0 :(得分:2)

看起来FB昨天推动了一些可能导致这个问题的变化。任何禁用Flash的浏览器似乎都会导致api调用中断。我甚至无法在iphone / ipad Safari上登录Spotify.com。

这看起来像是在http://developers.facebook.com/bugs/315958608459599?browse=search_4f60cb168df304e98947536

报告的错误

答案 1 :(得分:1)

今天早上我遇到了完全相同的问题。昨天上班了。我的结局没有变化。适用于桌面浏览器。但是使用TypeEror失败:'undefined'不是iPad上的对象错误。似乎是FB.api中的错误。希望FB的某个人能够看到这个并尽快解决它。