使用Google Plus登录网站后退出报错:Uncaught ReferenceError: signOut is not defined
解决Google Plus退出时
signOut is not defined的错误 这个错误我之前也碰到过,本质是浏览器触发按钮点击事件时找不到你定义的signOut函数,大概率是函数作用域问题或者Google Auth2 API初始化顺序不对导致的,下面给你具体的修复方案:
1. 确保signOut函数在全局作用域可访问
如果你的signOut函数定义在某个局部闭包(比如DOMContentLoaded回调、API初始化的内部函数)里,浏览器的onclick事件是无法访问到它的。你需要把函数挂载到全局的window对象上,让按钮能直接调用。
2. 正确初始化Google Auth2 API
必须等Google Auth2 API完全加载并初始化完成后,再定义signOut函数,否则调用gapi.auth2.getAuthInstance()会出错。
完整的修正代码示例:
首先引入Google平台脚本:
<script src="https://apis.google.com/js/platform.js" async defer></script>
然后编写初始化和退出逻辑:
// 初始化Google Auth2 function initGoogleAuth() { gapi.load('auth2', function() { // 替换成你的Google OAuth客户端ID gapi.auth2.init({ client_id: 'YOUR_GOOGLE_CLIENT_ID' }).then(function(auth2) { // 将signOut挂载到全局window对象,确保onclick能访问 window.signOut = function() { auth2.signOut().then(function () { console.log('User signed out.'); // 可选:退出后跳转或刷新页面 // window.location.reload(); }); }; }); }); } // 页面加载完成后执行初始化 document.addEventListener('DOMContentLoaded', initGoogleAuth);
最后修改退出按钮,加上return false阻止默认跳转行为:
<li id="google_plus"><a href="#" onclick="signOut(); return false;">Logouts</a></li>
额外检查项
- 确认你已经替换了代码中的
YOUR_GOOGLE_CLIENT_ID为实际的客户端ID - 检查
platform.js脚本是否正确加载,没有被浏览器拦截 - 不要把
signOut函数放在任何局部作用域内(比如某个函数的内部),必须让它在全局可访问
内容的提问来源于stack exchange,提问作者dipti
相关产品推荐
相关产品推荐

