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

时间:2019-02-01 03:47:59

标签: javascript facebook facebook-javascript-sdk fbsdksharedialog

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

我有一个按钮可以打开对话框,当我从页面上打开对话框时,它会自动显示在页面上的iframe中,这很棒!正是我想要的。

现在是问题所在,我有另一个页面重定向到该完全相同的页面,如果设置了get变量,它会设置为Facebook共享对话框调用完全相同的函数。它调用它,但是现在它在新窗口中打开,而不是在iframe中打开,我不知道为什么。我将关闭窗口,然后单击按钮,它将在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";
            }
        });
    }

1 个答案:

答案 0 :(得分:0)

我自己弄清楚了这一点,只需在调用函数之前设置一个超时就可以使它以相同的方式起作用。原始呼叫中的所有内容都必须未完全加载。

setTimeout(facebook_share, 3000);