我知道收到以下错误是一个常见问题:
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
打印到控制台,但未定义。
根据上面的代码,知道出了什么问题吗?
答案 0 :(得分:1)
您是否已尝试通过文档准备好您的脚本?
document.addEventListener("DOMContentLoaded", function(event) {
//do work
});
此外,我不建议你这样做。
你应该:
答案 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
});
});