用于网站代码的基本Google登录代码无法在Internet Explorer 11中使用

时间:2015-07-01 20:00:11

标签: javascript internet-explorer google-oauth google-openid google-signin

我正在尝试使用Google登录网站(https://developers.google.com/identity/sign-in/web/)并注意到我的解决方案无法在Internet Explorer 11中运行。为了尝试消除尽可能多的因素,我创建了一个简单的测试用例基于Google提供的示例代码。

我已经在我的Windows 7 PC上的Chrome,Mac上的Chrome,Mac上的Safari,Mac上的Firefox和iPhone上的Safari上测试了它。它适用于所有这些(例如,当我点击登录按钮并选择/输入我的Google帐户时,它返回到页面,按钮显示,“登录”)。

然而,它不适用于PC上的Internet Explorer 11,或者奇怪的是,适用于iOS的Chrome。单击该按钮后,将打开一个窗口以允许我选择我的Google帐户,但在进行选择后,窗口将关闭并返回到页面,其中仍然显示“登录”按钮。

以下是示例代码:

<html>
<head>
<meta name="google-signin-client_id" content="61023618497-vqfbod57f26ncjl9d6firk3t09ve4tt3.apps.googleusercontent.com">
<script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
<div class="g-signin2"></div>
</body>
</html>

有关可能发生的事情的任何想法?我四处寻找并没有找到任何解决方案。

一个想法是将“accounts.google.com”添加到IE的可信站点。这没用。我也尝试通过https而不是http来访问该页面。这也没有什么不同。还有什么我应该尝试的吗?

4 个答案:

答案 0 :(得分:3)

几个月后,我遇到了同样的问题。

如果你看一下:

https://developers.google.com/identity/sign-in/web/build-button

并尝试使用他们的演示按钮登录,它不适用于IE11(但它适用于我在不同操作系统使用的其他浏览器)。我找不到任何解决方案。

我将留下未来读者的评论,他将来会搜索同样的问题。如果Google上的演示按钮不起作用,她至少可以放心,问题可能不在她的代码中。 :)

答案 1 :(得分:1)

请确保您没有配置IE 11来阻止所有第三方Cookie。

第三方Cookie是必需的,第三方Cookie被阻止时发生的用户体验 - 正如您所发现的那样 - 还有很多不足之处。没有向用户显示警告或错误消息。

您可以尝试在错误发生之前捕获错误。可以通过尝试在第二个域(您控制的)上设置cookie然后再发出第二个请求以确保cookie已设置来检测第三方cookie是否被阻止。您需要服务器上的一个脚本或其他东西可以设置和检查cookie(由于浏览器安全模型,它不能仅使用JavaScript完成)。

答案 2 :(得分:1)

我做了以下成功: 从$ document.ready加载脚本以启动Google按钮渲染等。 (即您在apis.google.com/js/client:platform.js?onload=x中的任何内容) 例如 &lt; script src =“https://apis.google.com/js/client:platform.js?onload=startApp”async defer&gt;&lt; / script&gt; 将startApp()移到此处: $(document).ready(function(){     的startApp(); startApp()看起来像这样: function startApp(){     gapi.load('auth2',function(){         gapi.client.load('plus','v1')。then(function(){             gapi.signin2.render('signin-button',{                 范围:'https://www.googleapis.com/auth/plus.login',                 fetch_basic_profile:false             });             gapi.auth2.init({                 fetch_basic_profile:false,                 范围:'https://www.googleapis.com/auth/plus.login'             })。然后(                 function(){                     的console.log( '初始化');                     auth2 = gapi.auth2.getAuthInstance();                     auth2.isSignedIn.listen(updateSignIn);                     auth2.then(updateSignIn());                 });         });     }); }

答案 3 :(得分:0)

我努力让这个例子在localhost上工作,但是只要我将它部署到真实的URL,就可以了。