Facebook javascript事件不触发任何方式我把它

Facebook javascript events not fired any way i turn it

本文关键字:何方 事件 javascript 任何方 Facebook      更新时间:2023-09-26

我使用Facebook JavaScript SDK与我的网站,有一个选项那里设置事件,当用户登录/注销从Facebook,所以我可以显示他在我的网站通知。无法管理它工作,尝试了所有方法,也使用offline_access权限。

下面是我的HTML代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="description" content="blabla" />
        <meta name="keywords" content="blabla" />
        <meta property="og:title" content="blabla" /> 
        <meta property="og:url" content="http://XXX/" />
        <meta property="fb:app_id" content="XXX" />
        <title>Facebook Notifier</title>
        <link href="<?php echo base_url(); ?>styles/style.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
        <script type="text/javascript" src="<?php echo base_url(); ?>js/jquery.cookie.js"></script>
        <script src="http://connect.facebook.net/en_US/all.js"></script>
        <script type="text/javascript" src="<?php echo base_url(); ?>js/global.js"></script>
    </head>
    <body>
<div id="fb-root"></div>
    <div id="my_div">
    </div>
</a>
</body></html>

这是我的js代码:

FB.init({
        appId  : 'XXX',
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml  : true, // parse XFBML
        oauth : true, // enables OAuth 2.0
        channelUrl : 'http://XXX/channelUrl'
    });
    FB.getLoginStatus(function(response) {
        if (response.authResponse) {
            connected = true;
        }
        else{
            connected = false;
        }
    }, true);
    FB.Event.subscribe('auth.authResponseChange', function(response) {
        if(response.authResponse) connected = true;
        else connected = false;
    });

在这个js代码的末尾,我有一个函数,每隔几秒钟运行检查连接变量,它是一个全局的。它没有改变,我试图从facebook登录/注销,没有事件火灾。只有当我刷新页面时,我才能获得用户状态。在firefox firebug控制台,我得到的消息(也尝试在chrome, ie):未捕获的异常:错误:https://www.facebook.com代理。InstallTrigger 我试图通过尽我所能在谷歌和stackoverflow中找到这个错误来解决这个问题,但仍然不起作用。顺便说一句:当我在原始文件中写XXX时,它是我的url或我的appid。谢谢。

我一直对Facebook触发的auth.事件有点怀疑,所以在您的情况下,我可能只是自己设置一个轮询器来检查连接用户的身份验证状态。这样的:

var connected;
FB.init({
    appId  : 'XXX',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    oauth : true, // enables OAuth 2.0
    channelUrl : 'http://XXX/channelUrl'
});

FB.getLoginStatus(handleUserStateChange);
FB.Event.subscribe('auth.authResponseChange', handleUserStateChange);
function handleUserStateChange(response) {
    connected = !!response.authResponse;
}
setInterval(function() {
    FB.getLoginStatus(handleUserStateChange, true);
}, 10000)   // poll every 10 seconds

当您在FB.init配置对象中定义status: true时,您不需要在开始时将第二个参数传递给FB.getLoginStatus,因为这会强制检查Facebook而不是从存储的变量中读取(这已经是我们刚刚initd的最新信息)。

看起来你的connected可能有变量作用域问题。

这样做可能会有帮助:

var connected; // define/initialize connected variable outside functions
FB.init({
    appId  : 'XXX',
    status : true, // check login status
    cookie : true, // enable cookies to allow the server to access the session
    xfbml  : true, // parse XFBML
    oauth : true, // enables OAuth 2.0
    channelUrl : 'http://XXX/channelUrl'
});
FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        connected = true;
    }
    else{
        connected = false;
    }
}, true);
FB.Event.subscribe('auth.authResponseChange', function(response) {
    if(response.authResponse) connected = true;
    else connected = false;
});

我会使用console.log()从你的函数响应订阅的事件,看看什么是真正发生(或不发生)。然后根据console.log()告诉您的内容编写实际代码。

我在一个函数中做FB.Event.subscribe,该函数在文档准备事件上调用:

<script>(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/all.js#xfbml=1&appId=...";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
$("document").ready(function(){
    FB.Event.subscribe('edge.create',
      function(response) {
        alert('You liked the URL: ' + response);
      });
});
</script>

或者这里有另一个例子,确保在执行任何调用之前初始化FB

我是FB开发的新手,几天前遇到了同样的问题。

我尝试了几乎所有的答案和解决方案,但没有工作了。不管我在我的最新的VS项目。然而,我记得在我的第一个VS项目中得到了这个工作在那里我学习了一个关于同样问题的教程。过了一段时间,我检查了最初的项目,令我惊讶的是,它在那里启动了,而在另一个项目中没有。

最后我意识到FB上的Canvas Url(应用程序设置)是罪魁祸首:H t t p://localhost:15497/

它被设置为我的本地主机,端口在我的其他项目中使用。我更改了端口号,突然它也在我的其他项目中工作。

确保FB应用程序设置中的画布url与您的Visual Studio运行应用程序的位置匹配。同时在部署web应用程序后更改该值。

如果你在2022年想知道为什么它不会发射。启用第三方cookie,这对我很有效。