2011-06-07 101 views
5

當有人試圖通過Facebook登錄我的網站時,他被重定向到一個頁面,他看到所有請求的權限,然後單擊以允許/禁止它們。通過javascript打開Facebook連接窗口?

有沒有什麼辦法讓這個頁面作爲一個分層窗口通過javascript打開而不需要用戶離開我的網站?例如,所以我的網站將在Facebook連接窗口懸停在其上方的背景中。

有什麼想法嗎?

+0

我認爲你可以使用jQuery彈出並加載iframe ...... – Anish 2011-06-07 06:31:35

+0

@Anish在那裏沒有辦法做到這一點? – 2011-06-08 16:02:21

回答

6

答案是否定的。另外,你不能在IFrame中加載登錄頁面,因爲Facebook有該頁面的幀斷路器。

您正在談論的網頁叫做OAuth dialog。默認情況下,由於「display」參數設置爲「page」(其他值包括:popup,iframe,touch和wap),所以請求用戶登錄您的應用將導致頁面重定向。你想要的是調用這個對話框,顯示設置爲「iframe」。但是,文檔states:「如果指定iframe,則必須具有有效的access_token。」而且,要獲得access_token,用戶需要先登錄到您的應用程序。因此,您將無法在嵌入式IFrame中顯示登錄頁面。

但是,一旦用戶使用基本權限設置授權您的應用程序,您可以使用對話框的顯示模式向「iframe」(因爲您擁有access_token)提示其他權限。

+0

因此,如果我想讓他登錄到我的網站時,最好的選擇是使用彈出窗口? – 2011-06-11 23:34:50

+0

最好的選擇是使用JavaScript SDK的默認行爲(即頁面重定向),因爲彈出窗口可能由於各種原因而無法打開。例如,Internet Explorer的文檔[states](http://msdn.microsoft.com/en-us/library/ms537632(v = vs.85).aspx):「彈出窗口阻止程序阻止腳本啓動的彈出窗口,在沒有用戶點擊鏈接的情況下創建的窗口。「由於JS SDK的錯誤,我看到了其他故障。 – 2011-06-12 00:19:01

+0

是的,但客戶堅持認爲你必須保持在同一個網站,而不是重定向。爲此,彈出窗口是最好的選擇? (無論如何,它們只會在點擊鏈接後觸發) – 2011-06-26 14:18:56

2

我支持大衛的回答。另外,如果您以某種方式在iframe或div中加載登錄對話框,用戶將無法知道他/她是否真的將登錄憑據提交給Facebook或其他某個網站。

還不能評論。 :(

+0

關於用戶無法辨別它是否真的是facebook的好處。 – 2011-06-11 23:36:01

3

我使用Facebook上的彈出式內,它工作得很好。

1)「假」 Facebook的登錄鍵式

以按鈕的屏幕截圖,包裹它的IMG標籤用屬性的一個標籤

href="<?= $facebook->getLoginUrl(...); ?>" 
onclick="facebookPopup(this.href); return false" 

2)創建JavaScript彈出功能

function facebookPopup (url) { 
    popup = window.open(url, "facebook_popup", 
"width=620,height=400,status=no,scrollbars=no,resizable=no"); 
    popup.focus(); 
     } 

3)創建FB Connect「登陸頁面」

創建一個php文件,用於在完成連接對話框時處理用戶數據,例如,如果他是新用戶,則保存他的用戶名和facebook-uid,或者只是將他登錄到if他的身份證號碼已經知道。 然後通過的Javascript關閉彈出窗口並刷新你的主頁:

function CloseAndRefresh() 
    { 
     window.opener.location.href = window.opener.location.href; 
     window.close(); 
    } 

您可以通過<body onload='CloseAndRefresh()'>

觸發功能還記得在登錄-URL(REDIRECT_URI)到指定的LandingPage的URL。 另外,如果您在登錄URL中指定'display'=>'popup',它將顯示「Permission Request」-Dialog的精簡版本。