2014-09-25 54 views
4

我試圖在我的web應用程序中共享Facebook上的鏈接。我已經有初始化SDK等,下面的代碼工作正常:當href參數是一個變量時,Facebook共享對話框不起作用

callToMyAPI() 
    .then(function(response) { 
     FB.ui({ 
      method: "share", 
      href: "http://www.google.com", 
     }, function(response) { 
      console.log(response); 
     }); 
    }); 

這彈開一個Facebook共享對話框,並鏈接到http://www.google.com和一點點嵌入的預覽(在底部,顯示框來自網址的圖片,以及來自頁面的標題和說明/摘錄)。當我點擊對話框中的「發佈到Facebook」按鈕,然後切換到Facebook,我看到與共享鏈接的帖子。

但我需要使用從我的API返回的值動態設置href參數。所以我做了這個:

callToMyAPI() 
    .then(function(response) { 
     var url = response; // http://www.google.com 

     FB.ui({ 
      method: "share", 
      href: url, 
     }, function(response) { 
      console.log(response); 
     }); 
    }); 

基本上,所有我做的是與變量url(其值響應,這是http://www.google.com)取代硬編碼"http://www.google.com"。其他一切都完全一樣。但是,當我這樣做,這裏會發生什麼:

  1. Facebook的分享對話框仍然打開,但它缺少URL的嵌入式預覽我想分享

  2. 當我點擊「發佈到Facebook「按鈕,對話框關閉,但沒有任何內容發佈到Facebook。這就是記錄的反應僅僅是一個空數組([]

所以它窒息使用從我作爲href值API的反應,但我不明白爲什麼。我該如何解決?


更新:多試錯之後,我發現這個古怪的動作......

如果我使用http://dev.example.comhref值(其中example.com其實是我真正的域名),我不要在共享對話框的預覽,並沒有什麼向Facebook發佈:

FB.ui({ 
    method: "share", 
    href: "http://dev.example.com" 
}); 

但是,如果使用http://www.example.com(注意www)爲href值(再次,其中example.com其實是我真正的域名),我還沒有得到在共享對話框中的預覽,但後確實經歷:

FB.ui({ 
    method: "share", 
    href: "http://www.example.com" 
}); 

然而,由於有在共享對話框中仍然沒有預覽,它實際上並沒有將鏈接附加到消息上。所以,在Facebook上,我得到的是一篇帖子,其中包含我寫的任何評論,但沒有嵌入到http://www.example.com的鏈接。

+0

你嘗試只是'HREF:response'? – isherwood 2014-09-25 18:38:15

+0

是的,我確實是第一次,但沒有區別。我只是使用'url'變量來使它更清楚一點,那就是來自我的API的響應,以及來自Facebook的響應。 – daGUY 2014-09-25 18:43:34

+0

如果你寫'var url ='http://www.google.com';'?如果是的話,那可能是'response'變量是一個對象而不是一個字符串。 – 2014-09-25 19:09:10

回答

1

真正的答案是三個方面:

  1. http://dev.example.com網站所需的認證;我完全忘了這一點,因爲我有我的用戶名/密碼保存的,所以它從來沒有提示我

  2. http://www.example.com實際上是一個較長的URL(http://www.example.com/test/12345)未指向該服務器上現有的頁面(只存在在我的開發服務器上)。所以Facebook可以達到網址(不需要授權),但無法從網站上刮取任何東西,因此,爲什麼帖子會通過,但沒有嵌入預覽

  3. 我分享的頁面缺少各種開放圖元標籤(og:type等);顯然href是,你可以通過共享方式傳遞的唯一參數,而一切事,那就是所需的份額來自OG標籤頁

所以我添加缺少的OG標籤頁面(上除了og:url),在我的開發服務器上禁用認證(暫時用於測試),現在終於帖子正在通過附加的適當鏈接進行。

+0

非常感謝... – Umair 2015-02-19 04:52:29

1

我解決了這個現在由地方share方法的使用feed方法,如this answer提到:

callToMyAPI() 
    .then(function(response){ 
     var url = response; 

     FB.ui({ 
      method: "feed", 
      link: url, 
     }, function(response) { 
      console.log(response); 
     }); 
    }); 

的語法是完全一樣的share方法,只有參數名稱爲link而不是href,它工作正常。這證實了我的回答確實是一個字符串,所以我真的不明白爲什麼share不能以相同的方式工作。

唯一的問題是,feed方法是deprecated,並將在2015年4月30日停止工作。所以我仍然想找到一種方法使這個工作與更新的share方法。

1

我有同樣的問題,我通過在我必須分享的url結尾處添加一個隨機GET參數來解決它。

例如:

var url = window.location; 
url = url+"?randomParameter=randomValue" 

FB.ui({ method:'share', href: url }, function(response){}); 
+1

你的問題是該窗口.location不是一個字符串。這是一個位置對象。它會自動轉換爲最多次的字符串,但Facebook會驗證您是否發送了一個字符串。當你連接另一個字符串時,url被轉換爲字符串,並且沒有更多問題。真正的解決方案是使用window.location.href – glerendegui 2017-11-02 14:16:14

相關問題