2015-04-29 26 views
1

我知道,收到以下错误是一个普遍的问题:FB是不是在科尔多瓦/离子应用程序定义的错误

ReferenceError:FB is not defined

我有参考以下职位,这似乎涵盖了广泛的解决方案的阵列。 FB is not defined problem

具体我遇到的问题是,如果我考出我的应用程序部署到浏览器中,fbAsyncInit(...)在我的根index.html page.I知道这个打击,因为我在FB的init的第一行把一个alert('fbAsyncInit(..)')码。例如,如果我运行下面的命令,它提醒fbAsyncInit(..)

ionic serve

只要我使用下面的命令部署到一个设备,我没有得到任何警告,当我尝试实际调用$cordovaFacebook.login(...)它给了我以下错误:

ReferenceError: FB is not defined

我的根index.html类似于(删除了一些东西为简洁起见)。

<html> 

    <!-- Other stuff here --> 

    <div id="fb-root"></div> 
    <script type="text/javascript" src="lib/additional/FacebookConnectPlugin.js"></script> 
    <script> 
     window.fbAsyncInit = function() { 
     console.log('fbAsyncinit(..)'); 

     FB.init({ 
      appId  : '/*App id here*/', 
      cookie  : true, // enable cookies to allow the server to access 
      xfbml  : true, // parse social plugins on this page 
      version : 'v2.1' // use version 2.1 
     }); 


     (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/sdk.js"; 
      fjs.parentNode.insertBefore(js, fjs); 
      }(document, 'script', 'facebook-jssdk')); 
     }; 


    </script> 

    <!-- Other Stuff Here --> 
</html> 

的一件事是打在FacebookConnectPlugin.js

// Bake in the JS SDK 
(function() { 
    if (!window.FB) { 
     console.log("launching FB SDK"); 
     var e = document.createElement('script'); 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/sdk.js'; 
     e.async = true; 
     document.getElementById('fb-root').appendChild(e); 
     console.log(window.FB) //FB is undefined 
    } 
}()); 

当脚本标签加载了FacebookConnectPlugin.js和这一段代码运行时,它试图打印window.FB的定义下面这段代码控制台,但它的未定义。

任何想法给上述代码有什么错?

+1

地方你的代码$ ionicPlatform.ready内(函数(){//代码在这里}) –

+0

放置在$ ionicPlatform的FB.init和SDK代码。准备好(...)做了诡计!感谢您的帮助 – TheJediCowboy

回答

0

您是否试图用文档准备好环绕脚本?

document.addEventListener("DOMContentLoaded", function(event) { 
    //do work 
}); 

此外,我不建议您执行这样的操作。

您应:

  • 在您的应用程序定义一个控制器
  • 一个$ionicPlatform ready事件添加到您的控制器
  • 执行你在它的FB插件的初始化。
0

您需要使用ngCordova,而不是传统的方法。

http://ngcordova.com/docs/plugins/facebook/

示例代码

module.controller('MyCtrl', function($scope, $cordovaFacebook) { 

    $cordovaFacebook.login(["public_profile", "email", "user_friends"]) 
    .then(function(success) { 
     // { id: "634565435", 
     // lastName: "bob" 
     // ... 
     // } 
    }, function (error) { 
     // error 
    }); 


    var options = { 
    method: "feed", 
    link: "http://example.com", 
    caption: "Such caption, very feed." 
    }; 
    $cordovaFacebook.showDialog(options) 
    .then(function(success) { 
     // success 
    }, function (error) { 
     // error 
    }); 


    $cordovaFacebook.api("me", ["public_profile"]) 
    .then(function(success) { 
     // success 
    }, function (error) { 
     // error 
    }); 


    $cordovaFacebook.getLoginStatus() 
    .then(function(success) { 
     /* 
     { authResponse: { 
      userID: "12345678912345", 
      accessToken: "kgkh3g42kh4g23kh4g2kh34g2kg4k2h4gkh3g4k2h4gk23h4gk2h34gk234gk2h34AndSoOn", 
      session_Key: true, 
      expiresIn: "5183738", 
      sig: "..." 
     }, 
     status: "connected" 
     } 
     */ 
    }, function (error) { 
     // error 
    }); 

    $cordovaFacebook.getAccessToken() 
    .then(function(success) { 
     // success 
    }, function (error) { 
     // error 
    }); 

    $cordovaFacebook.logout() 
    .then(function(success) { 
     // success 
    }, function (error) { 
     // error 
    }); 

}); 
+0

这就是我为$ cordovaFacebook.login(...)编写的代码,但是我没有看到您在哪里注册$ cordovaFacebookProvideer的fb的AppID。您仍需要指定并初始化FB SDK – TheJediCowboy

+0

当您通过终端安装facebook cordova插件时,它已自动注册您的AppID。你可以检查.plist文件。 –

相关问题