我有一个组件,显示来自Facebook的用户的登录按钮或用户名。 取决于他是否登录。
现在在这个组件中我使用
created
事件所以我会立即检查登录信息。 代码在简短中创建:
FB.getLoginStatus(function(response) {
//more things.....
错误是它说没有定义FB, 确定他是对的,FB还没有加载。
我像这样加载facebook
<body>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '1111111111',
xfbml : true,
version : 'v2.7'
});
};
(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>
答案 0 :(得分:14)
我一直在寻找答案。
Thanx to vbranden的评论我能够让它为我工作。
您需要做的是在创建的方法中初始化facebook sdk。 然后从fbAsyncInit函数内部调用登录。
这对我有用:
<body>
<div id="test"></div>
<script>
new Vue({
el: '#test',
created: function() {
console.log('created main');
window.fbAsyncInit = function() {
FB.init({
appId : '1111111111',
xfbml : true,
version : 'v2.7'
});
//This function should be here, inside window.fbAsyncInit
FB.getLoginStatus(function(response) {
console.log(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>
</body>
答案 1 :(得分:9)
可以通过创建vuejs插件来解决此问题。
请检查nuxt.js中的related answer。
创建一个插件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'
})