Facebook JavaScript SDK问题:“未定义FB”
-
14-10-2019 - |
题
以下代码,从Facebook文档中复制 这里, ,在Chrome中不为我工作。
<div id="fb-root"></div>
<script src="http://connect.facebook.net/en_US/all.js"></script>
<script>
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
</script>
在JavaScript控制台中,我得到了:
Uncaught ReferenceError: FB is not defined
我在Firefox或Safari中的SDK没有任何问题,只是Chrome。
解决方案
我看到了一个案例,Chrome已安装了阻止Facebook脚本的WidgetBlock。结果正是此错误消息。确保禁用任何可能干扰的扩展。
其他提示
因此,问题实际上是您不在等待初始化。这将导致随机结果。这是我使用的。
window.fbAsyncInit = function () {
FB.init({ appId: 'your-app-id', cookie: true, xfbml: true, oauth: true });
// *** here is my code ***
if (typeof facebookInit == 'function') {
facebookInit();
}
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
这将确保一旦加载了所有内容,就可以使用FacebookInit功能。这样,您就不必每次使用它都需要复制初始代码。
function facebookInit() {
// do what you would like here
}
如果您在FBASYNCINIT定义之后省略了分号,也会出现此错误。
window.fbAsyncInit = function() {
FB.init({
appId: 'YOUR APP ID',
status: true,
cookie: true,
xfbml: true
});
//do stuff
}; //<-- semicolon required!
没有半隆,情况与此较短的例子相同:
var x = function () {
console.log('This is never called. Or is it?');
}
('bar');
该函数被调用,因为如果没有半隆,则(“ bar')部分被视为对刚刚定义的函数的调用。
我也遇到了这个问题,该解决的问题与Facebook无关,但我包括的脚本是不好的形式
<script type="text/javascript" src="js/my_script.js" />
我把它更改为
<script type="text/javascript" src="js/my_script.js"></script>
它有效...
Weew ...希望我的经验能够帮助其他人几乎做到了所有事情,但仍然无法正常工作...
哦,男孩... ^^
尝试异步加载: http://developers.facebook.com/docs/reference/javascript/fb.init/
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
};
(function() {
var e = document.createElement('script');
e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
e.async = true;
document.getElementById('fb-root').appendChild(e);
}());
</script>
我有一个非常混乱的科迪,通过Ajax加载了Facebook的JavaScript,我必须确保在致电FB之前已完全加载JS文件。这似乎对我有用
$jQuery.load( document.location.protocol + '//connect.facebook.net/en_US/all.js',
function (obj) {
FB.init({
appId : 'YOUR APP ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
//ANy other FB.related javascript here
});
该代码使用jQuery加载JavaScript并执行JavaScript的函数回调Onload。这比为块创建一个onload EventListener要少得多,该块最终在IE6、7和8上工作得很好
Adblock阻止了Facebook JS API脚本,因为它与Facebook Connect有关,这通常很烦人。
不确定您是否仍然遇到这个问题,但是我只是遇到了同样的问题,事实证明我进行了一个扩展程序,该扩展程序正在阻止所有不是Facebook的网站的Facebook。残疾,工作!
使用settimeout,因为有时fb.init需要一些时间来声明
function testAPI() {
console.log('Welcome! Fetching your information.... ');
FB.api('/me', function(response) {
console.log('Good to see you, ' + response.name + '.');
});
}
function login() {
FB.login(function(response) {
if (response.authResponse) {
testAPI();
} else {
// cancelled
}
});
}
setTimeout(function() {
login();
},2000);
尝试将脚本加载到头部部分。此外,如果您在某些呼叫下定义脚本,那就更好了: document.ready
, ,如果您在身体部分中定义了这些脚本
我遇到了相同的问题,我发现的唯一解决方案是将所有使用FB语句的所有内容都放置在Init脚本中,我还使用了异步加载,因此回调函数是需要FB的所有内容。我有一个普通的dinamyccallage载有php的页面,因此许多零件需要由php控制的不同的Facebook功能,这使一切都使一切变得有些混乱,但正在起作用!如果我尝试从加载脚本中获取任何FB声明,则Firefox显示“未定义FB”消息。希望它对任何事情有所帮助。
为了测试有关FB未完成的Mattys建议,我在脚本中提出了警报。这导致我可以控制的延迟。果然...这是一个时机问题。
$("document").ready(function () {
// Wait...
alert('Click ok to init');
try {
FB.init({
appId: '###', // App ID
status: true, // check login status
cookie: true, // enable cookies to allow the server to access the session
xfbml: true // parse XFBML
});
}
catch (err) {
txt = "There was an error on this page.\n\n";
txt += "Error description: " + err.message + "\n\n";
txt += "Click OK to continue.\n\n";
alert(txt);
}
FB.Event.subscribe('auth.statusChange', OnLogin);
});
我遇到了同样的问题,我找到了原因。
我有avast!安装在我的计算机中的防病毒软件,它要求我安装Chrome插件的更新。新的 avast! plugin for chrome
具有阻止广告和跟踪的功能,默认情况下,它会阻止Facebook访问权限。我已经解决了我的问题,只是允许Facebook进入Avast!我需要的网站的Chrome插件。
由于这个问题很老,我认为有些人可能与我一样,新的Avast!镀铬插件。
有解决方案:)
加载窗口后,您必须运行脚本
如果使用jQuery,则可以使用简单的方式:
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'your-app-id',
xfbml : true,
status : true,
version : 'v2.5'
});
};
(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>
<script>
$(window).load(function() {
var comment_callback = function(response) {
console.log("comment_callback");
console.log(response);
}
FB.Event.subscribe('comment.create', comment_callback);
FB.Event.subscribe('comment.remove', comment_callback);
});
</script>
我有同样的问题。解决方案是使用core.js而不是debug.core.js
Facebook更喜欢您将其SDK异步加载,因此它不会阻止您的页面所需的任何其他脚本 iframe
在FB对象完全创建之前,即使仅在FB对象之前调用FB,控制台试图在FB对象上调用方法 fbAsyncInit
功能。
尝试同步加载JavaScript,您不应该再收到错误。为此,您可以复制并粘贴Facebook提供的代码并将其放在外部 .js
文件,然后包括 .js
文件中的文件 <script>
标记在 <head>
您的页面。如果您必须异步加载其SDK init
功能。
我也有一个类似的问题,事实证明这是Adblocker Pro。确保检查是否已禁用此或其他阻止扩展。因此,我损失了1hr 30分钟左右。感觉像个菜鸟;)
您是否将Appid属性设置为当前的应用程序ID?
如果您使用的是jQuery,请尝试将FB与jQuery通话一起放置
例如
$(document).ready(function(){
FB.Event.subscribe('auth.login', function(){
alert('logged in!');
});
});
对我有用