Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.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
Facebook javascript事件不会以任何方式被触发_Javascript_Facebook - Fatal编程技术网

Facebook javascript事件不会以任何方式被触发

Facebook javascript事件不会以任何方式被触发,javascript,facebook,Javascript,Facebook,我在我的网站上使用Facebook JavaScript SDK,有一个选项可以设置用户从Facebook登录/注销时的事件,这样我就可以在我的网站上向他显示通知。 无法管理它工作,尝试了所有操作,还使用了脱机访问权限 以下是我的html代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我在我的网站上使用Facebook JavaScript SDK,有一个选项可以设置用户从Facebook登录/注销时的事件,这样我就可以在我的网站上向他显示通知。 无法管理它工作,尝试了所有操作,还使用了脱机访问权限

以下是我的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代码的最后,我有一个函数,每隔几秒钟运行一次,检查连接变量,这是一个全局变量。它没有改变,我尝试从facebook登录/注销,但没有引发任何事件。 只有当我刷新页面时,我才能获得用户状态。 在firefox firebug控制台中,我收到消息(也在chrome浏览器中尝试过): 未捕获异常:错误:Proxy.InstallTrigger 我试图通过尽我所能在google和stackoverflow中找到这个错误来解决这个问题,但仍然无法工作。 顺便说一句:当我在原始文件中写入XXX时,它是我的url或我的appid。
谢谢。

您可能在连接的
中遇到了变量作用域问题

类似这样的事情可能会有所帮助:

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>
(功能(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/all.js#xfbml=1&appId=…”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
$(“文档”).ready(函数(){
FB.Event.subscribe('edge.create',
功能(响应){
警报(“您喜欢URL:”+响应);
});
});

或者还有另一个例子,确保在您进行任何调用之前对FB进行初始化。

我一直对Facebook触发的
auth.
事件有点怀疑,所以在您的情况下,我可能会自己设置一个轮询器来检查连接用户的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
config对象中定义的
status:true
,您不需要在开始时将第二个参数传递给
FB.getLoginStatus
,因为这将强制检查Facebook,而不是读取存储的变量(这已经是最新的信息,因为我们刚刚初始化了).

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

我尝试了几乎所有的答案和解决方案,但什么都没有 成功了。不管我在我的工作中做了什么,这个该死的事件都不想开火 最新VS项目。然而,我记得在我的第一个VS项目中实现了这一点 在那里,我遵循了关于同一问题的教程。过了一会儿,我检查了最初的项目,令我惊讶的是,它在那里启动了,而不是在我的另一个项目中

最后我意识到FB上的画布Url(应用程序设置)是罪魁祸首: htp://localhost:15497/

它被设置为我的本地主机,端口在我的另一个项目中使用。我改变了端口号,突然它也在我的另一个项目中起作用


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

我在问题中提到,正如您所说,我已连接为全局变量。我还尝试了console.log()的功能。那里没有任何记录。只有在firefox firebug中,我在尝试登录/注销facebook时才会出现未捕获的异常,而在chrome firebug中,我什么也得不到。如果使用jQuery,为什么不同时使用jQuery.getScript()来获取SDK?你能解释一下为什么要使用双“not”操作符吗?:
connected=!!response.authResponse
您只是将其用作“惰性类型转换”吗?顺便说一句,+1,因为轮询
FB.getLoginStatus()
解决了我的问题。我觉得这不是一种“正确”的方法,但它确实有效!
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