如何在当前窗口下停止打开帐户选择器窗口

时间:2014-04-24 17:06:44

标签: javascript google-chrome google-oauth

间歇性地我得到一段时间,调用gapi.auth.authorize导致在我的应用程序窗口 下打开一个帐户选择器窗口,当然用户不会注意到这一点。

有没有办法强迫它在顶部,或者至少检测到它已被打开所以我可以提醒用户?

我目前正在Chrome上测试,但我也在Firefox上看过它。

重新创建......

  1. 登录多个Google帐户
  2. 转到我的应用程序,该应用程序调用gapi.auth.authorize
  3. 通常会有一个弹出窗口,要求我选择要通过身份验证的Google帐户。但有时,此弹出窗口位于我的应用程序窗口下方,因此被其遮挡而未被用户注意
  4. 应该(有时是)的样子......

    enter image description here

    什么不应该,但有时看起来像......

    enter image description here

2 个答案:

答案 0 :(得分:0)

我无法通过后台弹出窗口重现您的问题,但我可能会为您提供解决方案。

这是一个黑客,但它避免了直接修改谷歌的代码。

这是重要的部分,下面提供了一个演示。基本上你是覆盖window.open并在创建后立即关注弹出窗口。打开窗口后,您可以恢复window.open的默认功能。

function handleAuthClick(event) {

  // Hijack window.open
  var windowOpen = window.open;
  window.open = function(url, name, options) {
    var newWindow = windowOpen.apply(this, arguments);
    setTimeout(function() {
      newWindow.focus();
    }, 0);
    return newWindow;
  };

  gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult);

  // Release window.open
  window.open = windowOpen;
  return false;
}


演示http://jsbin.com/sefozinu/1/edit

众所周知,Chrome和FireFox的后续版本不尊重window.focus

答案 1 :(得分:0)

我遵循了这些步骤,而且像其他人一样 - 无法重现这一点。 (在Windows 8.1上使用Chrome 34.0.1847.131)

问题可能是浏览器,而不是内容..

它看起来正在使用我不知道的Chrome / Chromium浏览器。看着屏幕截图,我看到窗口左上角有一个足球。你可以指定它,让我们重现吗?

(或者考虑安装新的vanilla,主流Chrome浏览器作为测试基线。)