为什么Firefox不喜欢Facebook登录弹出窗口?

时间:2014-01-03 07:57:50

标签: javascript facebook firefox facebook-javascript-sdk

问题:为什么Firefox不喜欢Facebook登录弹出窗口?

设置:我正在实施Facebook" Login for JavaScript"网站上的功能。我已直接复制示例代码并将其设置在本地Web服务器上进行测试。我从示例代码中唯一改变的是我为我的应用程序添加了appId

故事:当我在浏览器中访问代码时,我会看到Facebook登录按钮。在Chrome和Safari中,当我点击登录按钮时,我会弹出一个窗口,允许我输入我的Facebook凭据。但是,在Firefox(v26.0)中,弹出窗口尝试打开但随后消失。我会说它被Firefox阻止,但通常Firefox告诉我它阻止的东西。在这种情况下,弹出窗口毫不客气地消失了。 (Video screen capture of the disappearing popup.

我尝试过的内容:我在其他浏览器中尝试了这个问题。我确保示例代码除了appId之外没有改变。我看着控制台上的消息,没有看到任何异常。弹出窗口使用以下URL:

// wrapped for reading convenience 
https://www.facebook.com/dialog/oauth?
    scope=
    &response_type=none
    &redirect_uri=https%3A%2F%2Fwww.facebook.com%2Fdialog%2Freturn
        %2Farbiter%3Frelation%3Dopener%26close%3Dtrue%23origin
        %3Dhttp%253A%252F%252Ftestsite.dev%253A8090%252Ff327c2a561b678
    &seen_v4_nux=false
    &state=f3da5377afecdda
    &app_id=012345678901234 // obviously obfuscated
    &display=popup

如果我将该网址粘贴到Chrome或Safari地址栏中,我会收到一个登录对话框。如果我将该URL粘贴到Firefox地址栏中,我会看到一个看似空白的窗口。查看来源显示以下内容:

<script>
    (function _(a,b,c,d,e){
        document.domain='facebook.com';
        var f=window[a];
        if(f)
        if(window.location.protocol==b
        {if(!f.closed)f.require('Arbiter').inform('platform/dialog/response',d);}
        else if(f.postMessage)
        {if(!b.match(/^https?:$/)||!c.match(/\.facebook\.com$/))
        throw new Error('Invalid Origin: '+b+'//'+c);
        f.postMessage('FB_DIALOG_RESPONSE:'+JSON.stringify(d),b+'//'+c);
        }e&&window.close();})
        ("opener", "https:", "www.facebook.com", {
        "error_code":901,"error_message":"This app is in sandbox mode.
        Edit the app configuration at http:\/\/developers.facebook.com\/apps
        to make the app publicly visible.","state":"f97b48e573c33"}, true
    );
</script>

如果我从互联网断开连接并单击“登录”按钮,弹出窗口将保持不变,但除了尝试加载的URL之外完全空白(参见上文)。

其他信息:我使用的是Mac OS X.

1 个答案:

答案 0 :(得分:1)

它也发生在我身上 - 删除Facebook的饼干解决了它:)