Javascript 如何解决';FB未定义';?
有时我在加载时会遇到“FB未定义”问题 我意识到这个问题是因为有时候我的网站没有加载那个文件。所以它什么也得不到,物体FB实际上不存在 我的解决方案是在发生这种情况时阻止我的用户,因此我在JavaScript中尝试了以下代码,但似乎都不起作用:Javascript 如何解决';FB未定义';?,javascript,facebook,Javascript,Facebook,有时我在加载时会遇到“FB未定义”问题 我意识到这个问题是因为有时候我的网站没有加载那个文件。所以它什么也得不到,物体FB实际上不存在 我的解决方案是在发生这种情况时阻止我的用户,因此我在JavaScript中尝试了以下代码,但似乎都不起作用: if (FB) {/*run the app*/} else {/*alert the user*/} if (FB!==false) {/*run the app*/} else {/*alert the user*/} if (FB!='undefi
if (FB) {/*run the app*/} else {/*alert the user*/}
if (FB!==false) {/*run the app*/} else {/*alert the user*/}
if (FB!='undefined') {/*run the app*/} else {/*alert the user*/}
谢谢你的回答 您与最初的示例非常接近。您可以使用@jAndy的建议或:
if (typeof FB != 'undefined')
假设FB是一个包含Facebook对象的变量,我会尝试以下方法:
if (typeof(FB) != 'undefined'
&& FB != null ) {
// run the app
} else {
// alert the user
}
为了测试在普通的旧JavaScript中是否有未定义的内容,应该使用“typeof”操作符。您显示的示例仅将其与字符串“undefined”进行比较,除非您的FB对象确实包含字符串“undefined”
另外,您可能希望使用Firebug(在Firefox中)等各种工具来了解Facebook文件没有加载的原因。如果您的javascript中没有正确的脚本标记,FB就无法加载,这很奇怪。检查您的浏览器中是否安装了任何javascript阻止程序、广告阻止程序、跟踪阻止程序等,这些程序会使您的FB Connect代码失效。我认为您应该解决主要问题,哪种解决方案由Facebook提供(异步加载SDK): 您应该将其直接插入要加载的每一页的开始标记之后:
window.fbAsyninit=函数(){
FB.init({
appId:'您的应用程序id',
xfbml:是的,
版本:“v2.1”
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
从:
FacebookSDK for JavaScript没有任何独立文件
需要下载或安装,而只需包括
HTML中的一小段常规JavaScript将
异步地将SDK加载到页面中异步加载意味着
它不会阻止加载页面的其他元素。
更新:使用文档中的最新代码。我猜您没有放分号
在window.fbAsyncint=function(){…}的结束大括号}
处代码>对于仍然有这个FB错误的人,我使用这个厚颜无耻的修复程序来解决这个问题
我使用了HTTPS并将其更改为
它解决了我的问题 我从未被定义过FB。事实证明,我是在将函数原型化为名为“merge”的对象类和另一个名为“toArray”的对象类。
这两个都搞砸了Facebook,没有错误消息,但它不会加载
我更改了原型的名称,现在可以使用了。嘿,如果Facebook要对这个对象进行原型化,难道不应该允许我对它进行原型化吗 FB建议在正文之后添加async all.js include,以便在页面中使用FB对象时做好准备
您还可以使用setTimeout进行人工延迟,以确保加载了FB对象。e、 g
<script>setTimeout(function(){
FB.Event.subscribe('edge.create',
function (response) {
alert('msg via fb');
});},2000);
</script>
setTimeout(函数(){
FB.Event.subscribe('edge.create',
功能(响应){
警报(“通过fb发送消息”);
});},2000);
window.fbAsyninit=函数(){
FB.init({
appId:'your-app-id',
xfbml:是的,
版本:'v2.1'
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){
返回;
}
js=d.createElement;
js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}
(文档,“脚本”,“facebook-jssdk”);
从文档中可以看出:Facebook SDK for JavaScript没有任何需要下载或安装的独立文件,相反,您只需在HTML中包含一小段常规JavaScript即可。有适合您的解决方案:)
加载窗口后必须运行脚本
如果使用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>
window.fbAsyninit=函数(){
FB.init({
appId:'您的应用程序id',
xfbml:是的,
状态:正确,
版本:“v2.5”
});
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
$(窗口)。加载(函数(){
var comment_callback=函数(响应){
log(“comment_回调”);
控制台日志(响应);
}
FB.Event.subscribe('comment.create',comment\u回调);
FB.Event.subscribe('comment.remove',comment\u回调);
});
我有一个类似的问题,结果是Adblocker Pro。确保检查此或其他阻塞扩展是否已禁用。我因此损失了大约1小时30分钟。感觉像个傻瓜;) 。。。
...
检查div id=“fb root”/div”!!!运行非常重要。多亏了你的回答,我终于找到了答案!+1我通过将connect.facebook.net/en_us/all.js“>更改为connect.facebook.net/en_us/all.js来修复它“>@RickLeinecker您能解释一下您所做的更改吗?rAjA他删除了脚本的异步加载,因此在加载此脚本而不是加载其他外部/内部脚本时,page会等待。Javascript中通常不需要其他外部/内部脚本的列表。o
<script>
window.fbAsyncInit = function() {
FB.init({
appId :'your-app-id',
xfbml :true,
version :'v2.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>
<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>
...
</head>
<body>
<!-- Load Facebook SDK for JavaScript -->
<div id="fb-root"></div>
<script type="text/javascript">
...