if (!code) {
console.log('获取token,没有code去授权')
// 本地路径
let local = window.location.href
let appid = 'xxxxxxx'
// 不存在就打开下面的地址进行授权
window.location.replace('https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
appid +
`&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_base&state=type#wechat_redirect`)
} else {
console.log('这里是有code的')
}
replace在微信浏览器是和href差不多的,页面路由其实是从a跳转b(新的窗口),然后在b返回就会又回到a,而不是你设想的b直接覆盖a,这个问题我以前也研究了很久,特别的阴间 当a跳转b的时候在b的页面获取到code是先重定向当前页面地址因为如果你项目的路由方式是hash的话,微信的回调地址是拼接异常的所以需要改成你正常的页面路径 // 页面重定向 function pageRedirection() { var path = location.href const list = path.split( "#" ); if ( list.length > 1 ) { const path = list[ 0 ]; const secondUrl = list[ 1 ]; let returnUrl = path.includes( '?' ) ? path.split( "?" )[ 0 ] : path; returnUrl += '#' + secondUrl; var url = returnUrl } else { var url = path } console.log( url, "授权回调,重定向页面" ) window.history.pushState( {}, 0, url ) } 这一步是无感并且不会刷新页面的,然后这你可以继续执行你的code到服务器请求操作,当请求完成服务器用户注册/登录完成,然后跳转或者返回,这个时候其实你还是在b的窗口下,当你再次返回的时候才是回到a的窗口这个时候你就验证下你在b页面登录的token身份信息什么的缓存存在(代表登录成功)就调用WeixinJSBridge.call( 'closeWindow' );把页面关掉即可。 整个流程就是,a页面逻辑只负责验证是否登录然后跳转授权回来后验证成功就直接关闭微信浏览器,b页面逻辑负责登录注册然后继续使用,当然a和b其实是一个页面,只是里面的逻辑根据登录情况来判断是否授权而已