防止fb.ui()滚动浏览器

7

我正在使用iframe创建一个Facebook画布页面应用程序。 我正在使用fb.ui()创建一个对话框来分享,但是当对话框打开时,它首先居中,然后一旦异步调用加载对话框,它会将对话框移到iframe的顶部并将浏览器滚动到顶部。

我考虑使用jQuery重新定位框,但我还必须滚动浏览器位置,这让我感觉像是一个hack。 如有任何建议,将不胜感激。


3
这已被报道为Facebook SDK中的一个漏洞。我不太乐观,但如果每个人都说他们可以重现它,或许他们会修复它。 - Jonathan Tran
4个回答

1

我也遇到了同样的问题,iFrames中的定位很麻烦。保持对话框正确定位的最简单方法是使用弹出显示选项,它会在当前页面中心上方弹出一个新的浏览器窗口。虽然不太美观,但效果很好。

//generic sharing function
var fbshare = function(url, display) {
    var share = {
        method: 'stream.share',
        u: url,
        display: display
    };
    FB.ui(share);
};

//share using popup
<a href="#fbshare" onClick="fbshare('http://www.theurl.com','popup');">Share</a>

弹出窗口确实可以工作,但使用弹出窗口拦截器的人将无法看到它。 :( - xiao
@eNetik,不知何故这些弹出窗口没有被阻止,至少在FF或Chrome中没有。 - byron

0
我正在使用 jQuery 获取滚动位置,并将其设置在响应函数中。
scroll = $(window).scrollTop();
FB.ui(
{
//setup
},
function(response)
{
//handle response
$(window).scrollTop(scroll);
});

这个可以工作,但会产生闪烁效果,这样不太好 :) - Dzung Nguyen
这可以用来捕获他们尝试滚动并恢复它的操作: $(window).one('scroll.fbshare',function(){ $(window).scrollTop(scroll); }); - Dtipson

0
对于其他遇到此问题的人,我想再次强调Jonathan Tran上面的评论和这个已报告的错误,Facebook已经修复了SHARE对话框中的问题。如果您仍然遇到此问题,则可能是从JavaScript中调用FEED对话框,而Facebook尚未修复。请使用以下内容:
FB.ui({
        method: 'share',
        ...

不要这个:

FB.ui({
        method: 'feed',
        ...

-1

改进 Nate 的想法...

    window['__sy'] = $(window).scrollTop();
    FB.ui(
    {
    //setup
    },
    function(response)
    {
    //handle response
    });
    $(window).one('scroll',function (){$(window).scrollTop(window['__sy'])});

你可能应该解释一下这个方法如何/为什么比Nate的答案更好。通常最好在回答中附上一些代码解释。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接