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

https://open.dingtalk.com/document/orgapp/jsapi-replace-page?spm=ding_open_doc.document.0.0.4adc4a97Eh6jkB

这里指示是不支持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的时候,不能使用相对路径(具体原因还待研究)