Facebook javascript事件不会以任何方式被触发
我在我的网站上使用Facebook JavaScript SDK,有一个选项可以设置用户从Facebook登录/注销时的事件,这样我就可以在我的网站上向他显示通知。 无法管理它工作,尝试了所有操作,还使用了脱机访问权限 以下是我的html代码: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">
<!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