2

我尝试使用 FB Javascript SDK 进行 facebook 登录。

登录后不会仅在Opera浏览器中关闭登录窗口。我该如何解决这个问题?

我试过以下源代码:(在这个网站上在线 - 链接

<html>
  <head></head>
  <body>
    <div id="fb-root"></div>
    <script>
      window.fbAsyncInit = function() {

        FB.init({
          appId: '101103500012652', // App ID
          channelUrl: '//www.milujse.cz/app/channel.html', // Channel File
          status: true,
          cookie: true,
          xfbml: true
        });

        FB.Event.subscribe('auth.authResponseChange', function(response) {

          if (response.status === 'connected') {
            testAPI();
          } else if (response.status === 'not_authorized') {

          } else {

          }
        });
      };

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

      function testAPI() {
        FB.api('/me', function(response) {
          alert('Good to see you, ' + response.name + '.');
        });
      }

      function loginFB()
      {
        FB.login(function(response) {
          if (response.authResponse) {
            testAPI();
          } else {
          }
        });
      }

      function logoutFB()
      {
        FB.logout(function(response) {
        });
      }
    </script>

    <input type="button" value="Login" onclick="loginFB();
        return false;" />
    <input type="button" value="Logout" onclick="logoutFB();
        return false;" />
  </body>
</html>
4

3 回答 3

2

Opera 中似乎存在一个错误,即 Opera 在某些情况下不支持 windows 上的 window.close() 函数。

这在javascript:window.close() 和 Opera以及https://bugzilla.mozilla.org/show_bug.cgi?id=190515中被引用,其中这被列为错误。

根据http://dev.vaadin.com/ticket/5687,Opera中的 window.closed() 事件似乎也有问题

于 2013-05-17T02:44:48.290 回答
2

您是否考虑过检查浏览器,如果它是 Opera 使用其他方式与 facebook 连接,我的意思是使用 oauth 您可以将整个页面重定向到 facebook 登录页面而不是使用弹出窗口,因此您不会遇到无法连接的问题关闭弹出窗口。整个页面的链接类似于“ https://graph.facebook.com/oauth/authorize?client_id=YOUR_CLIENT_ID&redirect_uri=http:YOUR_CALLBACK-URL&scope=WHAT_YOU_WANT

于 2013-05-17T19:54:03.870 回答
1

例如,在关闭浏览器时编写与浏览器无关的登录/注销逻辑因此很难实现。

使用下面的代码检查并在 setUser(null) 处设置断点

包 com.example.vaadintests;

导入 com.vaadin.Application;导入 com.vaadin.ui.Window;导入 com.vaadin.ui.Window.CloseEvent;导入 com.vaadin.ui.Window.CloseListener;

public class VaadintestsApplication extends Application 
{
    @Override
    public void init() 
    {
        final Window rootWindow = new Window();
        setMainWindow(rootWindow);

        rootWindow.addListener(new CloseListener()
        {
            @Override
            public void windowClose(CloseEvent e)
            {
                setUser(null);
            }
        });

    }
}
于 2013-05-18T06:40:21.950 回答