【问题标题】:Preventing fb.ui() from scrolling the browser防止 fb.ui() 滚动浏览器
【发布时间】:2011-01-19 16:25:08
【问题描述】:

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

我考虑使用 jQuery 重新定位框,但是我还必须滚动浏览器位置,这对我来说是骇人听闻的。任何建议将不胜感激。

【问题讨论】:

  • 这已被报告为bug in Facebook's SDK。我并不乐观,但也许如果每个人都说他们可以重现它,他们会修复它。

标签: javascript facebook api


【解决方案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>

【讨论】:

  • 弹出窗口确实有效.. 但有弹出窗口阻止程序的人将无法看到这一点。 :(
  • @eNetik,不知何故这些弹出窗口没有被阻止,至少在 FF 或 Chrome 中没有
【解决方案2】:

我使用jquery获取滚动位置,然后在响应函数中设置。

scroll = $(window).scrollTop();
FB.ui(
{
//setup
},
function(response)
{
//handle response
$(window).scrollTop(scroll);
});

【讨论】:

  • 这会起作用,但它会产生一个闪烁的效果,一点都不好:)
  • 这可以用来捕捉他们滚动并恢复它的尝试: $(window).one('scroll.fbshare',function(){ $(window).scrollTop(scroll); });
【解决方案3】:

对于遇到此问题的任何其他人,只是重申Jonathan Tran 上面关于this reported bug 的评论,它已由 Facebook 修复,但仅适用于 SHARE 对话框。如果您仍然遇到此问题,则可能是从您的 Javascript 调用 FEED 对话框,而 Facebook 尚未费心修复该对话框。使用这个:

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

不是这个:

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

【讨论】:

    【解决方案4】:

    改进 Nate 的想法...

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

    【讨论】:

    • 您可能应该解释如何/为什么改进 Nate 的答案。一般来说,最好在答案中有一些解释以及您的代码。
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 1970-01-01
    • 2017-11-01
    • 2012-05-31
    • 1970-01-01
    • 2012-09-11
    • 2013-12-03
    • 1970-01-01
    相关资源
    最近更新 更多