Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解决';FB未定义';?_Javascript_Facebook - Fatal编程技术网

Javascript 如何解决';FB未定义';?

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

有时我在加载时会遇到“FB未定义”问题

我意识到这个问题是因为有时候我的网站没有加载那个文件。所以它什么也得不到,物体FB实际上不存在

我的解决方案是在发生这种情况时阻止我的用户,因此我在JavaScript中尝试了以下代码,但似乎都不起作用:

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">
...