最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Vue3+TypeScript實(shí)現(xiàn)防止支付密碼被瀏覽器保存功能

 更新時(shí)間:2025年07月01日 11:23:06   作者:愛(ài)睡懶覺(jué)  
最近做 PC 端支付功能,輸入支付密碼的時(shí)候,Chrome 彈了個(gè)是否保存密碼?說(shuō)實(shí)話,這功能擱登錄場(chǎng)景,確實(shí)挺方便, 但支付密碼?說(shuō)難聽(tīng)點(diǎn),萬(wàn)一用戶真保存了,自己都忘了,或者電腦不是自己的,密碼直接暴露,所以本文給大家介紹了利用Vue3實(shí)現(xiàn)防止支付密碼被瀏覽器保存功能

背景介紹

最近做 PC 端支付功能,輸入支付密碼的時(shí)候,Chrome 很“體貼”地彈了個(gè):

"是否保存密碼?"

說(shuō)實(shí)話,這功能擱登錄場(chǎng)景,確實(shí)挺方便。 但支付密碼?說(shuō)難聽(tīng)點(diǎn),萬(wàn)一用戶真保存了,自己都忘了,或者電腦不是自己的,密碼直接暴露。 于是,產(chǎn)品一句話:

“瀏覽器這個(gè)彈窗,給我去掉。”

好家伙,去掉瀏覽器行為,這不是在為難我初級(jí)開發(fā)。

方案思路

  • 項(xiàng)目基于 Vue3 + TypeScript + Element Plus,常規(guī)做法是用 <el-input type="password" /> 來(lái)實(shí)現(xiàn)密碼輸入。 但只要 type="password",瀏覽器一定會(huì)觸發(fā)保存密碼提示。

所以我的思路是:

type 改成 text,規(guī)避瀏覽器的默認(rèn)密碼保存行為

輸入框里不直接展示真實(shí)密碼,輸入什么都用 替換

真實(shí)密碼值自己內(nèi)部單獨(dú)存一份;

實(shí)現(xiàn)步驟

基礎(chǔ)版本

<template>
  <el-input
    v-model="pwdSymbol"
    placeholder="請(qǐng)輸入"
    type="text"
    @input="handleInput"
    @blur="handleBlur"
  />
</template>
<script setup lang="ts">
const pwdSymbol = ref("");
const pwd = ref("");
const handleInput = (value: string) => {
  const newValue = value.replace(/●/g, "")
  const lastLength = pwdSymbol.value.length;
  if (newValue) {
    pwd.value += newValue;
  } else {
    if (!lastLength) {
      pwd.value = "";
    } else {
      const arr = pwd.value.split("");
      arr.splice(-1, 1);
      pwd.value = arr.join("");
    }
  }
  let data = "";
  for (let i = 0; i < value.length; i++) {
    data += "●";
  }
  pwdSymbol.value = data;
};
const handleBlur = () => {
  console.log(pwd.value);
};
</script>
  • pwdSymbol用來(lái)展示,所以我們還需要聲明一個(gè)變量,用來(lái)存儲(chǔ)用戶真正輸入的值pwd
  • handleBlur主要是為了查看我們輸入的密碼是否正確

遇到的問(wèn)題

  • 只能支持「從最后一位輸入」
  • 中間位置輸入、刪除,真實(shí)密碼全亂套
  • 撤回(Ctrl+Z)直接把密碼還原,真實(shí)值跟展示完全對(duì)不上

進(jìn)階方案:精準(zhǔn)控制光標(biāo) & 禁止撤回

  • 通過(guò) ref 獲取原生 input DOM,拿到光標(biāo)位置,精準(zhǔn)處理字符串
  • 撤回操作干脆禁了,省事
// 設(shè)置input的ref
const elInputRef = ref();
const handleInput = (value: string) => {
  const el = elInputRef.value?.input;
  const cursorPos = el.selectionStart;
  const newValue = value.replace(/●/g, "");
  const lastLength = pwdSymbol.value.length;
  if (newValue) {
    if (cursorPos != lastLength) {
      // 說(shuō)明不是往后添加,而是在中間插入
      const arr = pwd.value.split("");
      arr.splice(cursorPos - 1, 0, newValue);
      pwd.value = arr.join("");
    } else {
      if (value.length === 1) {
        // 防止選擇內(nèi)容直接替換
        pwd.value = newValue;
      } else {
        pwd.value += newValue;
      }
    }
  } else {
    if (!lastLength) {
      pwd.value = "";
    } else {
      // 需要辨別是刪除還是撤回
      const arr = pwd.value.split("");
      arr.splice(cursorPos, 1);
      pwd.value = arr.join("");
    }
  }
  let data = "";
  for (let i = 0; i < value.length; i++) {
    data += "●";
  }
  pwdSymbol.value = data;
};
const handleKeydown = (e: KeyboardEvent) => {
  // 判斷是否按下撤回快捷鍵(Windows: Ctrl+Z,Mac: Meta+Z)
  if ((e.ctrlKey || e.metaKey) && e.key.toLowerCase() === "z") {
    e.preventDefault(); // 阻止默認(rèn)撤回行為
    console.log("用戶進(jìn)行了撤回操作");
  }
};

最終封裝

嫌麻煩可以直接封裝成組件,業(yè)務(wù)場(chǎng)景復(fù)用更方便,這里就不貼重復(fù)代碼了,思路一樣。

最后

這需求可能不算技術(shù)含量特別高,但實(shí)際業(yè)務(wù)里,安全和用戶體驗(yàn)都挺重要。

如果你們項(xiàng)目也有類似場(chǎng)景,希望這篇能省你點(diǎn)時(shí)間。

到此這篇關(guān)于基于Vue3+TypeScript實(shí)現(xiàn)防止支付密碼被瀏覽器保存功能的文章就介紹到這了,更多相關(guān)Vue3防止支付密碼被保存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能(流程詳解)

    vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能(流程詳解)

    無(wú)論是移動(dòng)端還是pc端登錄或者注冊(cè)界面都會(huì)見(jiàn)到手機(jī)驗(yàn)證碼登錄這個(gè)功能,輸入手機(jī)號(hào),得到驗(yàn)證碼,這篇文章主要介紹了基于vue實(shí)現(xiàn)短信驗(yàn)證碼登錄功能,需要的朋友可以參考下
    2019-12-12
  • vue中ref()和reactive()區(qū)別小結(jié)

    vue中ref()和reactive()區(qū)別小結(jié)

    本文主要介紹了vue中ref()和reactive()區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-07-07
  • echarts 使用formatter 修改鼠標(biāo)懸浮事件信息操作

    echarts 使用formatter 修改鼠標(biāo)懸浮事件信息操作

    這篇文章主要介紹了echarts 使用formatter 修改鼠標(biāo)懸浮事件信息操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • Vue 實(shí)現(xiàn)從文件中獲取文本信息的方法詳解

    Vue 實(shí)現(xiàn)從文件中獲取文本信息的方法詳解

    這篇文章主要介紹了Vue 實(shí)現(xiàn)從文件中獲取文本信息的方法,結(jié)合實(shí)例形式詳細(xì)分析了vue.js基于export導(dǎo)出的文件信息讀取相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • Vuex狀態(tài)機(jī)的快速了解與實(shí)例應(yīng)用

    Vuex狀態(tài)機(jī)的快速了解與實(shí)例應(yīng)用

    Vuex是專門為Vuejs應(yīng)用程序設(shè)計(jì)的狀態(tài)管理工具,這篇文章主要給大家介紹了關(guān)于Vuex狀態(tài)機(jī)快速了解與實(shí)例應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • vue實(shí)現(xiàn)打印功能的示例代碼

    vue實(shí)現(xiàn)打印功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vue實(shí)現(xiàn)打印功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Vue3父子組件傳參有關(guān)sync修飾符的用法詳解

    Vue3父子組件傳參有關(guān)sync修飾符的用法詳解

    這篇文章主要給大家介紹關(guān)于前端Vue3父子組件傳參有關(guān)sync修飾符的用法詳細(xì)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • 解決vue報(bào)錯(cuò)Syntax Error:TypeError:this.getOptions is not a function的問(wèn)題

    解決vue報(bào)錯(cuò)Syntax Error:TypeError:this.getOptions is&n

    在未安裝less 和 less-loader 的情況下,編寫了 less 模塊代碼,通過(guò) npm 同時(shí)安裝了兩者,遇到錯(cuò)誤后,將問(wèn)題歸因于 less-loader 版本過(guò)高,解決了問(wèn)題,分享經(jīng)驗(yàn),希望可以幫助到遇到同樣問(wèn)題的開發(fā)者
    2026-04-04
  • ant design vue中表格指定格式渲染方式

    ant design vue中表格指定格式渲染方式

    這篇文章主要介紹了ant design vue中表格指定格式渲染方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • vue自定義組件插入到body中的實(shí)現(xiàn)方式

    vue自定義組件插入到body中的實(shí)現(xiàn)方式

    文章介紹了如何在Vue中創(chuàng)建一個(gè)自定義的notice提醒組件,并將其插入到body中,該組件通過(guò)調(diào)用`show`方法顯示,調(diào)用`remove`方法銷毀,主要步驟包括創(chuàng)建組件、使用render函數(shù)加載、$mount掛載并插入到body中
    2025-12-12

最新評(píng)論

中西区| 土默特左旗| 鄱阳县| 通辽市| 南平市| 赤水市| 名山县| 凤山县| 安阳县| 淮安市| 保定市| 府谷县| 临高县| 奉新县| 长乐市| 上犹县| 高邑县| 公安县| 临海市| 如东县| 阜康市| 田林县| 密山市| 泾阳县| 昆山市| 绥阳县| 满洲里市| 北碚区| 休宁县| 余庆县| 武乡县| 信阳市| 财经| 萍乡市| 哈巴河县| 峡江县| 来凤县| 图木舒克市| 河池市| 涡阳县| 金乡县|