2013-03-02 2 views
7

हमारे ब्लॉग पर हमारे पास एक लिंक है जहां उपयोगकर्ता हमारे लेख अपनी टाइमलाइन पर पोस्ट कर सकते हैं। एक पॉपअप खुलता है और उपयोगकर्ता फेसबुक पर पोस्ट करता है, फिर पॉपअप वहां रहता है और "www.oursite.com" पर रीडायरेक्ट करता है। जब उपयोगकर्ता या तो रद्द बटन पर पोस्टिंग या क्लिक समाप्त करता है तो हम पॉपअप को बंद कैसे करते हैं? this so question के अनुसार यह नहीं किया जा सकता है लेकिन हफ़िंगटन पोस्ट ने इसे समझ लिया है लेकिन उनके कोड को देखते हुए हम इसे समझ नहीं सकते हैं। उदाहरण के तौर पर, the facebook share बटन यहां एक पॉपअप खुल जाएगा और फिर जब आप लेख पोस्ट करेंगे या रद्द करेंगे तो बंद करें।फेसबुक पर पोस्ट करने के बाद मैं पॉपअप को कैसे बंद करूं?

यहाँ हम क्या है:

FB.init({appId: "90210", status: true, cookie: true}); 

     function postToFeed() { 

     // calling the API ... 
     var obj = { 
      method: 'feed', 
      redirect_uri: 'http://www.oursite.com/', 
      link: 'http://www.oursite.com/', 
      picture: 'http://www.oursite.com/png.png', 
      name: 'Some title', 
      caption: '', 
      description: '' 
     }; 

     function callback(response){ 
      window.close(); // doesn't do anything 
      //document.getElementById('msg').innerHTML = "Post ID: " + response['post_id']; 
     } 

     FB.ui(obj, callback); 
     } 

हम window.close जोड़ने की कोशिश की है(); कॉलबैक में (और self.close();), redirect_uri खाली छोड़ने का प्रयास किया (और पूरी तरह से redirect_uri को छोड़ने का प्रयास किया, लेकिन यह आवश्यक है)।

+0

हो सकता है कि इस सवाल का जवाब आप मदद कर सकते है: http://stackoverflow.com/a/2520861/1427942 – Eich

उत्तर

15

http://oursite.com/#close_window पर रीडायरेक्ट करें। फिर अपनी साइट के मुखपृष्ठ पर, इस तरह कुछ शामिल करें:

if (window.location.hash == '#close_window') window.close();

+2

नहीं क्रोम में काम कर – Manuel

+0

क्रोम नहीं है अन्य स्क्रिप्ट – levi

0
<script>if (window.location.hash.indexOf("#close_window") != -1) window.close();</script> 
17

ऐसा लगता है कि स्वीकार किए जाते हैं जवाब नहीं रह गया है तथ्य यह है कि फेसबुक अब एक हैश के बाद कुछ भी स्ट्रिप्स और post_id = xxxxx के साथ यह बदल देता है की वजह से काम कर रहा है।

समाधान # 1 (आप अमेरिकन प्लान पर भरोसा करता है, तो निकट भविष्य में इस को बदलने के लिए नहीं):

if(window.location.search.indexOf('post_id')==1) window.close(); 

समाधान # 2 (आप परिवर्तन के खिलाफ एक छोटे से अधिक बीमा चाहते हैं और नहीं करते हैं एक दूसरे फाइल) मन: एक नया html फ़ाइल closewindow.html बनाएँ:

<html><body><script>window.close()</script></body></html> 

और रीडायरेक्ट में इसे करने के लिए लिंक।

+0

द्वारा खोला गया एक विंडो बंद करने की अनुमति दें समाधान # 2 शानदार है, लॉल, धन्यवाद। – Lauro182

8

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

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

मेरे जावास्क्रिप्ट कोड (आप 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

धन्यवाद आदमी, कुछ घंटों के लिए इसके साथ लड़ने के बाद, एक आदर्श समाधान! आपने मेरा दिन बचाया !! –

+0

सराहना करना अच्छा है! – Steven

1

यह वें का सीधा जवाब नहीं है ई मूल सवाल है, लेकिन यह दूसरों को यहां पहुंचने में मदद कर सकता है।

यह करने के लिए एक और अधिक मजबूत जिस तरह से आप प्रारंभिक पृष्ठ पर कार्यवाही करते हिस्सा सफलतापूर्वक पूरा कर लिया है की अनुमति देता है कि नहीं है:

उद्भव पेज में:

var shareWindow; 

function openShareWindow() { 
    // See https://developers.facebook.com/docs/sharing/reference/share-dialog 
    shareWindow = window.open('https://www.facebook.com/dialog/share?app_id=...&display=popup&redirect_uri=...'); 
} 

function shareCompleted() { 
    if (shareWindow) { 
    shareWindow.close(); 
    shareWindow = null; 

    // The share was successful, so do something interesting here... 
    } 
} 

पेज आपके पास में

window.opener.shareCompleted(); 

अब आप शेयर खिड़की का आश्वासन दिया रहे हैं: अपने redirect_uri है, जो मैं आमतौर पर http://myserver.com/share/close की तरह कुछ करने के लिए नक्शे के रूप में स्थापित बंद हो जाएगा और यदि आवश्यक हो तो आप मूल पृष्ठ पर कार्रवाई करने में सक्षम होंगे।

नोट: shareCompleted इस काम के लिए रूट विंडो नामस्थान में उपलब्ध होना चाहिए।

window.shareCompleted = shareCompleted; 
3

अद्यतन: इस स्क्रिप्ट आपकी रीडायरेक्ट पेज में जोड़ें: आप के रूप में आप होना चाहिए आपकी जावास्क्रिप्ट के सभी लपेटकर रहे हैं, तो यकीन है कि हो

if (document.referrer == "https://www.facebook.com/" && (window.location.href.indexOf('post_id=') != -1 || window.location.hash == '#_=_')) { 
    window.close(); 
} 
+0

यह ठीक काम कर रहा है :) –

2

बस से redirect_uri पैरामीटर को निकालने यूआरएल

here की तरह।

+0

क्या यह इन दिनों किसी के लिए काम कर रहा है (जुलाई 2017)? जब मैं 'यहां' पर क्लिक करता हूं तो मैं पोस्ट कर सकता हूं, लेकिन खिड़की बंद नहीं होती है, यह बस https://www.facebook.com/dialog/return/close#_=_ पर बैठती है –

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