我正在实施Google+登录的混合/一次性身份验证代码流,并在登录提示并授予应用程序权限后在Chrome的JS控制台中遇到此错误,可能是当Google的代码尝试回拨按钮时:
Uncaught SecurityError: Blocked a frame with origin "https://ww2.fa.org" from accessing a frame with origin "https://accounts.google.com". Protocols, domains, and ports must match.
在Safari或IE中似乎没有出现这种情况,并且有时在Firefox中会出现类似的权限错误,但在Chrome中可以更频繁地重现。使用登录按钮刷新框架(在遵循谷歌方面的提示之后)通常会导致刷新按钮“知道”登录成功调用成功处理程序...它应该始终无需刷新即可正常工作,但却没有。
有什么想法?登录位于https://ww2.fa.org/gauth/,如果您倾向于查看,它只会请求电子邮件范围!
答案 0 :(得分:16)
我摆脱此错误消息的方法是将https://accounts.google.com
添加到API开发人员控制台下的OAuth客户端设置中的AUTHORIZED JAVASCRIPT ORIGINS
下。 auth - >凭证。
<强>更新强>
当我切换到使用gapi.auth.signIn
而不是gapi.login.render
时,实际上没有修复它并且问题又重新出现了。 this post中的评论中描述的问题是g-oauth-window
将authResult
属性发送到后端时的序列化。删除该参数或只发送您需要的属性为我修复它。
var signInCallback = function(authResult) {
delete authResult['g-oauth-window'];
ajaxCallToBackend(authResult);
};
希望这有帮助。
答案 1 :(得分:8)
如果你得到同样的错误并且亚当发布的上述方法对你不起作用(它对我自己没有用),请尝试以下方法。
我通过禁用已安装的任何Chrome扩展程序来解决问题,这些扩展程序读取并更改呈现的HTML以及重写页眉并向页面注入一种JavaScript的内容。
一个这样的扩展(导致我Blocked a frame with origin "https://apis.google.com" from accessing a frame with origin "https://example.com
错误的扩展名)是Ripple Emulator(Beta)0.9.15
基于浏览器的html5移动应用程序开发和测试工具,可以在您访问的网站上读取和更改您的所有数据&#34;正如它在扩展权限细节中所述。
我禁用的另一个此类扩展是ModHeader 1.2.4修改请求标题,这也是&#34;读取并更改您访问的网站上的所有数据&#34;。
只需查看您的Chrome扩展程序,即可删除任何可疑的修改页面。