当路由模式为hash怎么对接京东物流回调链接

本文讲述了作者在处理京东物流授权回调时遇到的问题,通过在路由守卫中使用localStorage存储code并自动跳转,以及在目标页面清除code以避免重复使用,解决了hash路由下code获取和重定向的问题。

 为什么我要写这篇文章呢?是因为最近在做这个需求,京东物流是需要自己手动点击授权后把返回的code拿去授权,刚开始以为一切都很顺利的,然而等我看到路由为hash时候,浏览器会忽略#后面的东西,所以是无法重新跳回之前页面。

其实如果你的路由模式为history并且后端已经配置了,恭喜你用不到这篇文章了

可以在路由守卫

我们这里解决的是点击跳转到京东物流后回调地址返回code的解决方法

可以在beforeEach这个钩子函数获取到token后写上

let code = new URL(location.href).searchParams.get("code");
    if (code) {
//当链接中有code的时候就存入到缓存中
      window.localStorage.setItem("code", code);
//在本页面打开
      window.open('你需要跳转的地址' '_self')
    }

然后就去你的跳转地址页面写上:

async created() {
    let codeNum = window.localStorage.getItem("code");
    if (codeNum) {
      //这里写上你的京东回调api接口
    }
    if (codeNum) {
//这里无论如何记得删除code,因为code只能用一次,不然会一直报错
      setTimeout(() => {
        window.localStorage.removeItem("code");
      }, 2000);
    }
  },

### Vue3 Hash 路由模式介绍 在 Vue3 里,Hash 路由模式借助 URL 中的哈希值(即 `#` 后面的内容)来管理路由。采用这种模式时,URL 里会包含一个 `#` 符号,当 `#` 后面的内容改变页面不会重新加载,而是触发路由的切换。 创建 Hash 路由模式的代码示例如下: ```javascript import { createRouter, createWebHashHistory } from 'vue-router'; import Home from './views/Home.vue'; import About from './views/About.vue'; const routes = [ { path: '/', name: 'Home', component: Home }, { path: '/about', name: 'About', component: About } ]; const router = createRouter({ history: createWebHashHistory(import.meta.env.BASE_URL), routes }); export default router; ``` 在上述代码中,`createWebHashHistory` 函数用于创建一个 Hash 路由历史记录对象,把它传递给 `createRouter` 函数,就能创建一个基于 Hash 模式的路由实例。 ### 可能解决 Electron 中 Vue 路由跳转页面找不到问题的方法 - **调整路由模式**:将路由模式设定为 Hash 模式,能解决部分 Electron 打包后路由跳转的问题。在 Vue3 里,使用 `createWebHashHistory` 函数来创建 Hash 路由历史记录对象,示例如下: ```javascript const router = createRouter({ history: createWebHashHistory(import.meta.env.BASE_URL), routes }); ``` - **替换 Cookie 操作**:由于 Electron 不支持 `js - cookie`,登录成功后读写 `cookie` 等操作会失败。可以用本地缓存替换 `js - cookie` 的使用,避免因 `cookie` 操作失败致使路由跳转出现问题。比如用 `sessionStorage.setItem` 代替 `setCookie`,用 `sessionStorage.getItem` 代替 `getCookie` [^3]。 - **修改 `vue.config.js` 文件**:把 `productionSourceMap` 设置为 `true`,确保能正确读取 `token`,否则可能无法跳转。示例如下: ```javascript module.exports = { productionSourceMap: true } ``` 设置为 `true` 后重新打包放到 `electron - quick - start` 文件里,页面就可以跳转了 [^1]。 - **禁用历史 API 导航**:在 `electron` 文件夹 `main.ts` 中添加以下代码,禁用历史 API 导航,解决切换页面时闪回到首页的问题: ```typescript win.webContents.on('did-finish-load', () => { win?.webContents.executeJavaScript(` history.pushState(null, null, window.location.href); window.addEventListener('popstate', (e) => { history.pushState(null, null, window.location.href); }); `) }) ``` 这样可以避免路由跳转时不正常跳转闪回首页的情况 [^4]。 - **调整打包模式下的 `loadURL` 参数**:在打包模式下,使用访问文件的方式,`loadURL` 的参数要写成 `app://./index.html#/xxxx`: ```javascript if (process.env.WEBPACK_DEV_SERVER_URL) { console.log("dev env") winURL = `http://localhost:8080/#${args.route}` console.log("winURL", winURL) if (!process.env.IS_TEST) win.webContents.openDevTools() win.loadURL(winURL) } else { console.log("prod env") createProtocol('app') win.loadURL(`app://./index.html#${args.route}`) } ``` 确保在开发和生产环境下都能正确加载页面 [^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值