2012-01-20 13 views
5

बंद नहीं करता है, मैं जेएस एसडीके की FB.ui विधि का उपयोग करके फ़ीड संवाद खोलने की कोशिश कर रहा हूं और उपयोगकर्ता के शेयरों के बाद इसे बंद कर देता हूं। मेरी समस्या यह है कि फीड डायलॉग को रीडायरेक्ट_री की आवश्यकता होती है, भले ही प्रलेखन कहता है कि इसे परिभाषित करने की आवश्यकता नहीं है, और पॉपअप विंडो वहां रीडायरेक्ट होती है और कॉलबैक फ़ंक्शन की तरह बंद नहीं होती है।FB.ui फ़ीड संवाद के लिए redirect_uri की आवश्यकता है, संवाद

यहाँ मेरी कोड, क्लिक करें प्रस्तुत घटना से जुड़ी है:

FB.ui (
     { 
      method: 'feed', 
      name: 'xxx!', 
      link: 'link to FB tab', 
      picture: 'jpg', 
      caption: 'xxx', 
      actions: {name:'xxx',link:'url'}, 
      ref: 'xxx', 
      redirect_uri: 'link to FB tab' 
     }, 
     function(response) { 
      self.close(); 
     } 
    ); 

अगर मैं redirect_uri को बंद रखना होगा, पॉपअप को खोलता है, लेकिन यह सिर्फ कहते हैं अमेरिकन प्लान एप्लिकेशन में त्रुटि है और पुनः प्रयास करें।

उत्तर

2

ऐसा प्रतीत होता है यह है फेसबुक के जावास्क्रिप्ट SDK में एक ज्ञात परिवर्तन: http://developers.facebook.com/bugs/302946973066993

फेसबुक JavaScript API का उपयोग करते हैं, तो लागू है जब तक कि एक 'redirect_uri' संपत्ति पैरामीटर वस्तु में आपूर्ति की है FB.ui असफल हो जायेगी - यह व्यवहार अप्रत्याशित है क्योंकि:

1.) प्रलेखन में कहा गया है कि 'redirect_uri' स्वचालित रूप से अधिकांश एसडीके [1] द्वारा जोड़ा जाएगा - पहले जावास्क्रिप्ट एसडीके लाइटबॉक्स iFrame को बंद कर रहा था। 2.) फेसबुक लाइटबॉक्स iFrame रीडायरेक्टिंग में रीडायरेक्ट_री पैराम परिणाम जोड़ना जो उपयोगकर्ता को इसे बंद करने में सक्षम होने से रोकता है। 3.) redirect_uri param पहले की आवश्यकता नहीं थी।

यह वह व्यवहार है जिसका उपयोग मैं कर रहा हूं और डुप्लिकेट करने का प्रयास कर रहा हूं। एक एफबी देव रिपोर्ट करता है कि यह अब "डिजाइन द्वारा" है।

+0

तो, आप वास्तव में पुनर्निर्देशित होने से बच नहीं सकते हैं, वास्तव में? – geekazoid

0

हममम, डॉक्स मैं देख रहा हूँ कहना है कि वह आवश्यकता होती है और परिभाषित किया जाना चाहिए ....

redirect_uri

यूआरएल उपयोगकर्ता के बाद संवाद पर एक बटन क्लिक करता है पर रीडायरेक्ट करने। आवश्यक है, लेकिन अधिकांश एसडीके द्वारा स्वचालित रूप से निर्दिष्ट किया गया है।

+1

तब मुझे आश्चर्य है कि क्यों एफबी स्वयं में redirect_uri का उपयोग नहीं करता है एफबी के टीएस कोड नमूने।यूई और फ़ीड संवाद। –

+1

हमारे जैसे, फेसबुक पर डेवलपर्स मानव हैं। आप कितने डेवलपर्स जानते हैं कि उनके दस्तावेज़ को 100% अद्यतित रखें;) अशिष्ट सवाल, क्योंकि हम सभी जानते हैं कि उत्तर 0.000001% डेवलपर्स करते हैं। – DMCS

+1

देवताओं द्वारा एक प्रमुख चूक की तरह लगता है। किसी भी मामले में, अगर विंडो साझा करने के बाद बंद हो जाती है तो मुझे रीडायरेक्ट_री को जगह में रखने पर कोई फर्क नहीं पड़ता। –

1

इस समस्या पर काम करने के पूरे दिन खर्च करने के बाद, मेरे पास एक बहुत अच्छा समाधान है जिसे मैं साझा करना चाहता हूं। एफबी.ईई() के साथ एसडीके का उपयोग करने के बजाय, मैंने पाया है कि मैं अपने स्वयं के पॉपअप को मैन्युअल रूप से https://www.facebook.com/dialog/feed पर खोलकर पूरी तरह से बच सकता हूं। इसे इस तरह से करते समय, redirect_uri अपेक्षा के अनुसार काम करता है, और आप पॉपअप विंडो को बंद करने वाली HTML फ़ाइल पर रीडायरेक्ट कर सकते हैं। चाहे उपयोगकर्ता शेयर या रद्द पर क्लिक करता है, पॉपअप अपेक्षित के रूप में बंद हो जाएगा।

मुझे विश्वास नहीं है कि इस कोड के साथ कोई समझौता है, और यदि कुछ भी है, तो वास्तविक एसडीके की तुलना में उपयोग करना बहुत आसान है।

मेरे जावास्क्रिप्ट कोड (आप FacebookFeedDialog.js के रूप में सहेज सकते हैं) इस तरह दिखता है:

/* by Steven Yang, Feb 2015, originally for www.mathscore.com. This code is free for anybody to use as long as you include this comment. */ 
function FacebookFeedDialog(appID, linkTarget, redirectTarget) { 
    this.mParams = { 
    app_id: appID, 
    link: linkTarget, 
    redirect_uri: redirectTarget, 
    display: "popup" 
    } 
}; 

/* Common params include: 
    name - the title that appears in bold font 
    description - the text that appears below the title 
    picture - complete URL path to the image on the left of the dialog 
    caption - replaces the link text 
*/ 
FacebookFeedDialog.prototype.addParam = function(key, value) { 
    this.mParams[key] = value; 
}; 

FacebookFeedDialog.prototype.open = function() { 

    var url = 'https://www.facebook.com/dialog/feed?' + encodeCGIArgs(this.mParams); 
    popup(url, 'feedDialog', 700, 400); 
}; 

/* Takes a param object like this: 
    { arg1: "value1", arg2: "value2" } 
    and converts into CGI args like this: 
    arg1=value1&arg2=value2 

    The values and args will be properly URI encoded 
*/ 
function encodeCGIArgs(paramObject) { 

    var result = ''; 

    for (var key in paramObject) { 
    if (result) 
     result += '&'; 
    result += encodeURIComponent(key) + '=' + encodeURIComponent(paramObject[key]); 
    } 

    return result; 
} 

function popup(mylink,windowname,width,height) { 
    if (!window.focus) return; 
    var href; 
    if (typeof(mylink) == 'string') 
    href=mylink; 
    else 
    href=mylink.href; 
    if (!windowname) 
    windowname='mywindow'; 
    if (!width) 
    width=600; 
    if (!height) 
    height=350; 
    window.open(href, windowname, 'resizable=yes,width='+width+',height='+height+',scrollbars=yes'); 
} 

यहाँ ऊपर जावास्क्रिप्ट कोड का उपयोग करता है एक नमूना HTML फ़ाइल है:

<HTML> 
<BODY> 
<SCRIPT type="text/javascript" src="FacebookFeedDialog.js"></SCRIPT> 
<SCRIPT> 
var dialog = new FacebookFeedDialog(yourAppIDGoesHere,yourDestinationURLGoesHere,yourCloseWindowURLGoesHere); 
dialog.addParam('name','This is my title'); 
dialog.addParam('description','This is the description'); 
dialog.addParam('picture',yourImageURLGoesHere); 
dialog.addParam('caption','This is the caption'); 
</SCRIPT> 

<A href="javascript:dialog.open()">Open facebook dialog</A> 
</BODY> 
</HTML> 

आपका closeWindow एचटीएमएल फ़ाइल इस तरह दिख सकती है:

<SCRIPT> 
window.close(); 
</SCRIPT> 
+0

मैं यहां एक समान समाधान के साथ आया: http://stackoverflow.com/questions/8497217/fb-ui-popup-window-doesnt-close/9025219#9025219 ध्यान दें कि फ़ीड संवाद अब पक्ष में निराश हो रहा है शेयर संवाद का - मैंने सोचा कि इसे बहिष्कृत किया जाना था, लेकिन यह नहीं कहता कि संवाद के पृष्ठ पर अब और नहीं। मैं एसडी को एफडी पसंद करता हूं क्योंकि इसमें अधिक अनुकूलन विकल्प हैं। –

संबंधित मुद्दे