facebook - 如何将 Facebook SDK 与 Nuxt.js 一起使用?

标签 facebook vue.js authentication sdk nuxt.js

你可以看到我的代码。

npm install vue init nuxt/koa my-project (koa@2)

页面
|- 登录.vue

<script>
export default {
  name: 'login',
  method: {
    login () {
      let vm = this
      FB.login(function (response) {
        vm.statusChangeCallback(response)
      }, {scope: 'publish_actions'})
    }
  },
  mounted () {
    console.log('mounted')
    let vm = this
    window.fbAsyncInit = () => {
      FB.init({
        appId: 'my-facebook-app-id',
        cookie: true,
        xfbml: true,
        version: 'v2.8'
      })
      FB.getLoginStatus(function (response) {
        vm.statusChangeCallback(response)
      })
    }

    (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>

但是,

sdk.js:96 Uncaught TypeError: vm.statusChangeCallback 不是函数

在使用 Nuxt 项目(nuxt/koa)时,使用 Facebook SDK 的最佳方式是什么?

最佳答案

我今天遇到了同样的问题。这是我使用 nuxt.js 的解决方案

首先创建一个插件plugins/fb-sdk.js

const vue_fb = {}
vue_fb.install = function install(Vue, options) {
    (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)
        console.log('setting fb sdk')
    }(document, 'script', 'facebook-jssdk'))

    window.fbAsyncInit = function onSDKInit() {
        FB.init(options)
        FB.AppEvents.logPageView()
        Vue.FB = FB
        window.dispatchEvent(new Event('fb-sdk-ready'))
    }
    Vue.FB = undefined
}

import Vue from 'vue'

Vue.use(vue_fb, {
    appId: 'your-app-id',
    autoLogAppEvents: true,
    xfbml: true,
    version: 'v2.9'
})

我们可以使用Vue.FB调用FB SDK中的方法,监听任意组件中的fb-sdk-ready事件,如下所示:

export default{
    data: function () {
        return {isFBReady: false}
    },
    mounted: function () {
        this.isFBReady = Vue.FB != undefined
        window.addEventListener('fb-sdk-ready', this.onFBReady)
    },
    beforeDestroy: function () {
        window.removeEventListener('fb-sdk-ready', this.onFBReady)
    },
    methods: {
        onFBReady: function () {
          this.isFBReady = true
        }
    }
}

关于facebook - 如何将 Facebook SDK 与 Nuxt.js 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43665115/

相关文章:

javascript - FB.getLoginStatus() 不工作

facebook - 摆脱 facebook 共享/喜欢的 URL 查询(通过 mod_rewrite)

Facebook - 通过位置名称获取位置/地点 ID

javascript - 如何避免 Vue js 2 组件中的对象引用问题?

authentication - 使用 openSSL 验证我的自签名证书

ios - FBSDKLoginManager 未在 native ios 应用程序中打开登录对话框

javascript - 使用 vue.js 更改组件中的变量

css - 如何使表格标题不可滚动bootstrap vue

python - 在 Django 模型中访问用户

c# - Authorize 和 Request.IsAuthenticated 之间的区别