私はFacebookのドキュメントとここでStackOverflowで検索しています。このコードはFirefoxとChrome、さらにInternet ExplorerでもページがキャンバスのiFrame内に読み込まれていないときに機能しますが、アプリケーションキャンバスのiFrameではコールバックを呼び出さないため、getUserData
もfbAskAuth()
も呼び出されません。ご覧のとおり、私はchannelUrlパラメータを埋めました。これは私のコードです:getLoginStatusとgetAuthResponseがIEで動作しません
var fb = {};
fb = function(){
var pub = {};
var priv = {};
var base_url = '{base_url}';
//atributes
pub.user = {};
pub.token = {};
//methods
pub.init = function(callback)
{
//When the library has loaded, it calls this function
window.fbAsyncInit = function() {
//Facebook jsSDK inizalization
FB.init({
appId : '{app_id}',
channelUrl: base_url + 'res/channel.php',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
oauth: true
});
//Resize the iframe
FB.Canvas.setSize({ width: 760, height: ($('body').outerHeight(true) + 50) });
// Check for the user session
FB.getLoginStatus(function(response){
if (response.status === 'connected')
{
// This user has already authorized the app
priv.getUserData(response, callback);
}
else
{
// No user session available, this is a new user to the app
// or a user not logued in facebook
priv.fbAskAuth(callback);
}
});
};
//Asyncronous get of facebook library.
(function() {
var e = document.createElement('script');e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/es_ES/all.js';
document.getElementById('fb-root').appendChild(e);
}());
};
pub.inviteSendGeneral = function()
{
FB.ui({
method: 'apprequests',
message: pub.user.name+' te ha invitado a participar en La Porra de GOLT.',
data: 'tracking info'
}, function(requests){
$.ajax({
url: base_url + 'ajax/invite/',
type: 'post',
data: {fuid: pub.user.id, invitation: requests },
success: function(resp)
{
$('#help-msg').html(resp);
}
});
});
}
pub.inviteSend = function()
{
FB.ui({
method: 'apprequests',
message: pub.user.name+' te ha invitado a participar en una porra.',
data: 'tracking info'
}, function(requests){
if(requests !== undefined)
{
for(var i=0; i<requests.request_ids.length; i++)
{
FB.api(requests.request_ids[i], {access_token: pub.user.access_token}, function(request_obj){
$.ajax({
url: base_url + 'ajax/friends_invite/',
type: 'post',
data: {fuid: pub.user.id, invitation: request_obj.id, invited: request_obj.to.id, round: pub.getId($('.invite-friends').attr('id'))},
success: function(resp){
$('#help-msg').html(resp);
}
});
});
}
}
});
}
priv.getUserData = function(response, callback)
{
FB.api('/me', {access_token: response.authResponse.accessToken}, function(user_data) {
if(user_data.id != '0'){
pub.user = user_data;
pub.token = response.authResponse.accessToken;
callback.call();
}else{
priv.fbAskAuth(callback);
}
});
};
pub.checkLikes = function(likes, page_id)
{
//var likes = $.parseJSON(data);
for(var i=0; i<likes.data.length; i++)
{
if(likes.data[i].id == page_id){
return true;
}
}
return false;
}
priv.fbAskAuth = function(callback)
{
FB.login(function(response) {
if (response.status === 'connected') {
priv.getUserData(response, callback);
} else {
// user is not logged in
priv.fbAskAuth(callback);
}
}, {scope:'{app_perms}'});
};
pub.array2str = function(requests)
{
var result_str = '';
for(var i=0; i < requests.length; i++)
{
if(i == requests.length-1)
result_str = result_str + requests[i];
else
result_str = result_str + requests[i] + ',';
}
return result_str;
};
pub.getId = function(str)
{
var id_array = str.split('_');
return id_array[id_array.length-1];
};
return pub;
}();
、私はfb.initを呼び出すだけでなく、私は他のオブジェクトや関数が含まれます。すべては、任意のヒントが、おかげでいただければ幸いです
$(document).ready(function(){
fb.init(function(){
if($('.penaltis').length > 0)
{
loadFriends();
}
});
});
そのコールバックを呼び出していないgetLoginStatusを除き、正常に動作します。
はい、私はsslの資格情報とhttpsを持っていて、これと他のアプリで作業しています。私はhttp://とhttps://を試して、https://ではすべての要求がhttps:// –
javascriptが動作していて、他のjavascriptリスナーが動作していて、facebookダイアログが正常に動作しています。私は回避策を行い、このブラウザでPHPからデータを取得するためのコードを追加すると思います... –