https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
微信浏览器中,前端js跳转授权无法替换历史
信息: iphone8plus,微信7.0.15
// 前端使用
location.replace(`https://open.weixin.qq.com/connect/oauth2/authorize?appid=...`)
// 跳转授权时,没有替换历史,其结果等同于
location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=...`
// 但是其它url却是正常替换历史的
/**
* 微信授权 code
* @param {object} options {redirect_uri?, scope?, state?}
*/
function authorize(options = {}) {
options.redirect_uri = options.redirect_uri || location.href
var url = `
https://open.weixin.qq.com/connect/oauth2/authorize
?appid=${authorize.appid}
&redirect_uri=${encodeURIComponent(options.redirect_uri)}
&scope=${options.scope || 'snsapi_userinfo' || 'snsapi_base'}
&state=${options.state || 'STATE'}
&response_type=code
#wechat_redirect
`.replace(/\s/g, '')
// weixin webview
// location.replace 没有去掉历史
if (
navigator.userAgent.match(/MicroMessenger/i) &&
!navigator.userAgent.match(/wechatdevtools/i)
) {
// 【hack】 去掉一个历史 只适合前端路由
// 【但是】第一个页面就需要授权的话,就无法去掉了
history.back()
setTimeout(() => {
location.href = url
}, 0)
} else {
// 在微信浏览器中,此行没有替换历史,而是直接新增了一个历史,导致两个相同的历史页,需要返回两次
// 也是在微信浏览器中等同于 location.href = url
// 并且只是 https://open.weixin.qq.com/connect/oauth2/authorize 这个url才会这样
location.replace(url)
}
}
authorize.appid = 'config rewrite'
/*
// login
if(!param('code')){
authorize()
}
// ajax code => openid
*/
我在企业微信自建应用的构造网页授权链接遇到了同样的问题
解决了吗