2012-06-03 41 views
0

我有一個帶有邀請按鈕(又名FB.ui - > apprequests)的頁面選項卡應用程序,它從example.com/pagetab運行時正常工作(即,它彈出一個FB.ui朋友選擇器窗口等)但是當我將應用程序的頁面標籤指向那裏並從Facebook內部加載它作爲iframe時,沒有任何反應。起初,我認爲這是一個問題,因爲jquery不知道哪個文檔已準備就緒,但是我切換到使用onclick,甚至從Chrome控制檯輸入命令(當然,在iframe的範圍內),但沒有鏈接,發生......這是一個錯誤還是我錯過了什麼?FB.ui apprequest不工作​​在頁面選項卡

最少的代碼:

window.fbAsyncInit = function() { 
    FB.init({ 
    appId  : '123456789', // App ID 
    channelUrl : '//fbjscache.php', // Channel File 
    status  : true, // check login status 
    cookie  : true, // enable cookies to allow the server to access the session 
    xfbml  : true // parse XFBML 
    }); }; 
(function(d){ 
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
    if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    ref.parentNode.insertBefore(js, ref); 
}(document)); 
function sendInvite() { 
    console.log("Inviting..."); 
    FB.ui({method: 'apprequests', 
    title: 'Check out this great app!', 
    message: 'Join the fun!', 
    }, inviteCallback); 
} 

然後在頁面上

<a href="javascript:void(null)" class="invite" onclick="sendInvite()"><div class="facebookButton">Invite</div></a> 

此代碼的工作完全按照預期(彈出的可愛的朋友選擇對話框)時,頁面被直接加載,並且不執行任何操作時從一個iframe加載。這是一個錯誤還是有一些隱藏的設置/ JS怪癖,我不趕上?

回答

5

發現一個相關的問題後,(Send dialog doesn't work in page tab)我意識到,問題是,你需要手動包括在選項參數display : 'popup',所以工作規範要求:

function sendInvite() { 
    FB.ui({method: 'apprequests', 
     title: 'Check out this great app!', 
     message: 'Join the fun!', 
     display: 'popup' 
    }, inviteCallback); 
} 

此行爲是明確反對什麼the docs說的是應該發生的:

平臺對話框都建在各種網絡和移動網絡上都顯示環境的無縫運行。如果您使用JS,iOS或Android SDK調用對話框,則會根據用戶使用的平臺和設備自動選擇顯示模式。

除非自動選擇是「無顯示,沒有警告或錯誤消息」爲「頁面選項卡」和神祕組合「桌面瀏覽器」。

爲了記錄,適當的畫布應用程序沒有此限制。我在一個完整的應用程序中使用相同的代碼行,一切正常。