在 iFrame 中打开的 Facebook 共享对话框不一致

Facebook Share Dialog Opening in iFrame inconsistent

我已经使用 javascript 实现了 Facebook 共享对话框,但我遇到了一致性问题。

我有一个打开对话框的按钮,当我从页面这样做时,它会自动出现在页面上的 iframe 中,这太棒了!正是我想要的。

问题来了,我有另一个页面重定向到这个完全相同的页面,并且如果设置了 get 变量,它会为 facebook 共享对话框调用完全相同的函数。它调用它,但现在它在新的 window 中打开,而不是在 iframe 中打开,我不知道为什么。我会从字面上关闭 window 并单击按钮,它将在 iframe 中完美打开它。

$(document).ready(function() {
        window.fbAsyncInit = function() {
            FB.init({
                appId            : '######',
                autoLogAppEvents : true,
                xfbml            : true,
                version          : 'v3.2'
            });

            @if(isset($_GET['share']))
                facebook_share();
            @endif
        };

        (function(d, s, id){
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement(s); js.id = id;
            js.src = "https://connect.facebook.net/en_US/all.js";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));

        $('.fb-share').click(function() {
            facebook_share();
        });
    });

    function facebook_share(){
        FB.ui({
            method: 'share',
            mobile_iframe: true,
            href: '######',
        }, function(response){
            if (response && !response.error_message) {
                success.style.display = "block";
            } else {
                error.style.display = "block";
            }
        });
    }

我自己解决了这个问题,只需在调用该函数之前设置一个超时,就会导致它以相同的方式运行。一切都不能在原始调用时完全加载。

setTimeout(facebook_share, 3000);