4

我一直在尝试使用 Google + SignIn构建一种Hello World项目。我按照https://developers.google.com/+/web/signin/上的教程进行操作,我的(摘录)代码是:

...
<script>
        function signinCallback(authResult) {
        //location.reload();
        //var x = 0
        //while(x=0){
            if (authResult['access_token']) {
                // Successfully authorized
                 // Hide the sign-in button now that the user is authorized, for example:
                 document.getElementById('signinButton').setAttribute('style', 'display: none');
                //document.getElementById("secret").innerHTML = ("<a href="secret.html"><p>Non-Conspicuous Link to Super Secret Page</p></a>");
                //alert("IT WORKED");
                document.getElementById("secret").innerHTML=("Non-Conspicuous Link to Super Secret Page");
                document.getElementById("game").innerHTML=("Non-Conspicuous Link to Super Secret Game Page");
                document.getElementById('refresh').setAttribute('style', 'display: none');
                //alert("Please Refresh");
                 } else if (authResult['error']) {
                 // There was an error.
                 // Possible error codes:
                 //   "access_denied" - User denied access to your app
                 //   "immediate_failed" - Could not automatically log in the user
                 console.log('AuthERROR: ' + authResult['error']);
                //alert("ERROR: A team of poorly trained robots has been dispatched to handle the situation. If they arive, tell them '" + authResult['error'] + "'");
              }
            }
        </script>
...
<span id="signinButton">
        <span 
            class="g-signin"
            data-callback="signinCallback"
            data-clientid="CLIENT ID"
            data-cookiepolicy="single_host_origin"
            data-requestvisibleactions="http://schemas.google.com/AddActivity"
            data-scope="https://www.googleapis.com/auth/plus.login"
            data-width="wide"
            data-theme="light">
        </span>
...
<a href="secret.html"><p id="secret"></p></a>
...

当我在 Google Chrome(版本 29.0.1547.18 dev-m)中运行代码时,出现以下错误:

Blocked a frame with origin "https://accounts.google.com" from accessing a frame with origin "https://apis.google.com". Protocols, domains, and ports must match.

我的 signinCallback 函数中的代码在页面首次加载时被调用,但在使用按钮登录时不会运行。代码在页面重新加载之前不会执行。

但是,这个问题在 Firefox 中不会发生,因此它似乎是一个孤立于 Chrome 的错误。我还没有测试任何其他浏览器。

有没有办法解决这个问题?

谢谢!

4

2 回答 2

6

我正在调整 java 混合服务器端流程快速启动应用程序,即使使用 https 也会出现“帧阻塞”错误。我发现错误是由这段 javascript 客户端代码(在 onSignInCallback 函数中)触发的:

for (var field in authResult) {
  $('#authResult').append(' ' + field + ': ' +
      authResult[field] + '<br/>');
}

上面的代码是快速启动应用程序的一部分,仅用于教育目的。枚举或获取 authResult 对象中的某个字段时会发生错误。删除上面的代码(或用 try-catch 块包围它)解决了这个问题。

于 2014-09-09T01:57:25.293 回答
0

事实证明,我的按钮在没有刷新的情况下无法进行身份验证的原因是因为我忘记关闭我<script>的服务器,即使它在我的问题中的代码中已关闭。

对于错误,您似乎可以忽略它(感谢@Ismael Toé)。

于 2013-09-17T14:27:23.200 回答