我该如何停止账户选择窗口在当前窗口下打开?(涉及IT技术)

7
有时候调用 gapi.auth.authorize 会弹出一个账号选择窗口我的应用程序窗口下面,这样用户就注意不到了。有没有办法可以让它置顶,或者至少检测到它已经被打开了,这样我就可以提醒用户?我目前正在使用 Chrome 进行测试,但我也在 Firefox 上看到过这种情况。
要重新创建 ...
1.登录多个 Google 帐户
2.进入我的应用程序,该程序调用gapi.auth.authorize 3.通常,会出现一个弹出窗口,询问我要使用哪个谷歌帐户进行身份验证。然而,有时这个弹出窗口会位于我的应用程序窗口下方,因此被它遮挡,用户也就没注意到它了。
应该(有时)的样子... enter image description here 不应该,但有时会像这样... enter image description here

1
你有屏幕截图或其他能够展示发生情况的东西吗? - Suba S
@pinoyyid,你在开发Chrome扩展程序吗?因为我无法重现这个错误,提供一张截图会更好。 - ProllyGeek
这是一个示例页面:https://google-api-javascript-client.googlecode.com/hg/samples/authSample.html,是否可能使用此页面重新生成错误?因为它总是在新窗口中打开提示框。 - ProllyGeek
这在我的Chrome 34.0.1847.131m和IE10中有效。 - Rick Hoving
有时候对我也有效。问题是间歇性的。这不是一个扩展,而是一个简单的网页应用程序。当我说“进入我的应用程序”时,我是指在浏览器中输入我的应用程序的URL。 - pinoyyid
显示剩余3条评论
2个回答

0

我无法重现您遇到的弹出窗口在后台启动的问题,但我可能有一个解决方案。

这是一种hack方法,但它避免了直接修改Google的代码。

以下是重要部分,下面提供了演示。基本上,您正在覆盖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;
}


Demo: http://jsbin.com/sefozinu/1/edit

Chrome和FireFox的较新版本已知不支持window.focus


新颖的方法。我会试一试。你能否更新你的问题,说明你预计会遇到哪些跨浏览器问题。我已经授予了奖励,但在测试之前不会将答案标记为接受。 - pinoyyid
@pinoyyid -- 就像我说的那样,我已经尝试了多次,但无法重现这个错误。我知道它存在,因为几个月前我曾看到它发生过。据我所知,这是唯一的潜在解决方案,除非您正在开发具有提升权限的浏览器插件或其他应用程序。 - Syntax
遗憾的是,它不起作用(Chrome 30.0)。认证窗口仍然在我的应用程序窗口下面。我可以看到 newWindow 已被设为“DOMException”。 - pinoyyid

0

我按照步骤操作,但像其他人一样无法重现此问题。(使用Windows 8.1上的Chrome 34.0.1847.131)

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

看起来您正在使用一个我不知道的Chrome / Chromium浏览器。从屏幕截图中可以看到,在窗口左上角有一个足球。您能否为我们指定它以便我们进行复制?

(或者考虑安装一个新的原始、主流的Chrome浏览器作为测试基线。)


重新阅读问题,你会发现(a)问题似乎是间歇性的,(b)在Chrome和Firefox中都会出现。由于Google会默默地更新gapi库,因此很难追踪原因,因此永远不知道该库中的Javascript是否是一个促成因素。问题有6个赞,这表明我不是唯一遇到这个问题的人。顺便说一下,这是一个足球,而不是一个足球。那只是我与我的Chrome用户相关联的标志。 - pinoyyid
请说明Firefox或Chrome版本,我们现在只有足球截图。 - Barry Staes

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