在Cordova / Ionic App中{FB未定义错误

时间:2015-04-29 03:38:37

标签: cordova facebook-javascript-sdk ionic cordova-plugins

我知道收到以下错误是一个常见问题:

ReferenceError:FB is not defined

我引用了以下帖子,似乎涵盖了广泛的解决方案。 FB is not defined problem

具体问题是,如果我测试我的应用程序部署到浏览器,fbAsyncInit(...)会在我的根index.html页面中被点击。我知道这是因为我放了一个{{1在FB初始化代码的第一行。例如,如果我运行以下命令,它会发出警报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打印到控制台,但未定义。

根据上面的代码,知道出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

您是否已尝试通过文档准备好您的脚本?

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

此外,我不建议你这样做。

你应该:

  • 在您的应用上定义控制器
  • 向您的控制器添加$ionicPlatform ready事件
  • 在其中执行您的FB插件的初始化。

答案 1 :(得分: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
    });

});