阿里云平台
H5页面中使用window.location.href=xxx不生效的问题
刚开始使用 window.location.href = xxx 是生效的,后来改为了使用 dd.biz.navigation.replace ,如下所示
var gotoUrl = "/account/loginInDingding?client_id=@(Model.ClientId)&redirect_uri=@(redirectUri)&authCode=" + code;
dd.biz.navigation.replace({
url: gotoUrl,// 新的页面链接
onSuccess: function (result) {
},
onFail: function (err) { alert("替换页面错误" + err) }
});
效果就是”不跳转“
后来的解决方案是加上域名
var gotoUrl = window.location.protocol + "//" + window.location.host + "/account/loginInDingding?client_id=@(Model.ClientId)&redirect_uri=@(redirectUri)&authCode=" + code;
dd.biz.navigation.replace({
url: gotoUrl,// 新的页面链接
onSuccess: function (result) {
},
onFail: function (err) { alert("替换页面错误" + err) }
});
加上域名,变为绝对路径,在手机端正常,但是在PC端不会跳
后来查了下资料,说是不支持PC
如下地址: https://open.dingtalk.com/document/isvapp/replace-page
后来又看到说这个已经有新版,
https://open.dingtalk.com/document/orgapp/client-api-comparison-table
这里指示是不支持windows
于是想着回到window.location.href的时代,如下所示
var gotoUrl = window.location.protocol + "//" + window.location.host + "/account/loginInDingding?client_id=@(Model.ClientId)&redirect_uri=@(redirectUri)&authCode=" + code;
if (dd.env.platform == "pc") {
window.location.href = gotoUrl;
}
else {
dd.biz.navigation.replace({
url: gotoUrl,// 新的页面链接
onSuccess: function (result) {
},
onFail: function (err) { alert("替换页面错误" + err) }
});
}
问题依旧,在if分支中,已经进入到pc这里,但就是不跳转
最后只能对比之前的,发现区别就是绝对地址和相对地址的区别,于是,改为如下方式,
var gotoUrl = window.location.protocol + "//" + window.location.host + "/account/loginInDingding?client_id=@(Model.ClientId)&redirect_uri=@(redirectUri)&authCode=" + code;
if (dd.env.platform == "pc") {
window.location.href = "/account/loginInDingding?client_id=@(Model.ClientId)&redirect_uri=@(redirectUri)&authCode=" + code;
}
else {
dd.biz.navigation.replace({
url: gotoUrl,// 新的页面链接
onSuccess: function (result) {
},
onFail: function (err) { alert("替换页面错误" + err) }
});
}
终于可以跳转。
总结
在PC版钉钉中使用window.location.href=xxx的时候,不能使用相对路径(具体原因还待研究)