The FB.ui popup window does not close

advertisements

The initialization code:

            FB.init({
                appId: '123456789012345',
                channelUrl: 'http://localhost/Some/Url/FacebookChannel',
                status: true,
                cookie: true,
                oauth: true,
                xfbml: true
            });

The following code is called with an onclick:

    FB.ui({
            method: 'feed',
            name: settings.facebookShareName,
            link: settings.facebookLinkUrl,
            caption: settings.facebookShareCaption,
            description: settings.facebookShareDescription,
            message: message,
            display: 'popup'
    });

This code works fine in FF and Chrome, and mostly works in IE8. The popup is shown and the user can post to their wall, but after submitting, the window doesn't close. It turns white with no further interaction, but must manually be closed by the user.

Why doesn't the window auto-close in IE, and/or are there any workarounds to force the popup to close?

Edit: This issue may be related to this outstanding bug.


I have the same problem and have never been able to get a response from Facebook for the callback function. I don't see anything in console.log or any alerts I insert in the function.

My solution was to put a URL in FB.ui's redirect_uri that goes to an HTML page with self.close (or window.close). The FB.ui popup redirects there after the user's input and immediately closes. Remember to change your FB app's Site URL setting so it matches the domain the file resides on.

Here's my code, tied to my form's submit action. The function(response) callback is still there but not used. If anyone sees a syntax error please comment on it.

    FB.ui ({
        method: 'feed',
        name: '',
        link: '',
        picture: '',
        caption: '',
        description: '',
        actions: {name:'',link:''},
        redirect_uri: 'http://.../self.close.html'
        },
        function(response) {
            console.log(response);
            if (response && response.post_id) {
                alert('yes');
                self.close();
            } else {
                alert('else yes');
            }
        });

The line of code in self.close.html:

<script type="text/javascript">self.close();</script>