当前位置: 首页 > news >正文

前端vue实现系统拦截跳转外链并进入跳转询问界面

跳转询问界面如下图所示:

给自己挖坑的实现方式,最终解决方案请看最底下 

思路:正常情况下我们有2种方式跳转外链

第一种非a标签,我们手动添加事件进行跳转

<div class="dingdan public-padding p-item" @click="goOtherWebsite('https://www.baidu.com/')"><span class="iconfont icon-shezhi" style="color: #818C99;"></span><span>非a标签跳转外链</span>
</div>

 第二种a标签

<a href="https://www.baidu.com/" target="">a标签跳转外链</a>

第三种

1.分析下第一种

如果你不进入router,那你在跳转外链的时候vue框架的路由钩子不会监听到,因此我们从进router入手

a.新建一个中转询问页面linkWeb.vue,代码如下:

<template><div class="link-container"><div class="content-box"><div class="content-title">即将跳转到外部网站</div><div class="content-text">您将要访问的链接不属于本站点,请关注您的账号安全。</div><div class="content-link"><div class="external-link-href">{{urlValue}}</div></div><div class="ui button orange external-link-btn" @click="jumpUrl()">继续前往</div></div></div>
</template><script>
export default{name: 'linkWeb',data() {return {urlValue:''}},mounted() {this.urlValue=this.$route.query.target},methods:{jumpUrl() {window.open(this.urlValue)}}
}
</script>

b.修改全局钩子函数beforeEach,代码如下:

router.beforeEach((to, from, next)=>{console.log('❤❤❤全局导航路由守卫❤❤❤~~~~~~~~~~~~',to)// console.log(to.path.indexOf('https:')==-1&&to.path.indexOf('http:')==-1)if(to.path.indexOf('https:')==-1&&to.path.indexOf('http:')==-1) {next();} else { // 处理外链console.log('处理外链')let tempLinkUrl=to.pathif(tempLinkUrl.indexOf('/')!=-1&&tempLinkUrl.substr(0,1)=='/'){tempLinkUrl=tempLinkUrl.substr(1)}next({path: '/linkWeb',query:{target:tempLinkUrl}})}
})

注意,以上代码可能会报错,报错信息如:...via a navigation guard.,为解决此问题,我们需要在 Vue.use(Router)代码之前添加以下代码:

// 这段代码是为了解决跳转路由时报...via a navigation guard.的问题 start
const originalPush = Router.prototype.push
Router.prototype.push = function push (location, onResolve, onReject) {if (onResolve || onReject){return originalPush.call(this, location, onResolve, onReject)}return originalPush.call(this, location).catch(err => err)
}
// 这段代码是为了解决跳转路由时报...via a navigation guard.的问题 end

 

2.分析下第一种a标签跳转

我们需要手动禁止掉a标签默认的href属性跳转链接行为,将其转化为跳转我们自己的路由页面

关键代码如下:

mounted() {this.$nextTick(() => {document.querySelectorAll('a').forEach((item) => {item.addEventListener('click', this.linksPermissions)})})},beforeDestroy () {document.querySelectorAll('a').forEach((item) => {item.removeEventListener('click', this.linksPermissions)})},methods:{linksPermissions (e) {console.log('=== 禁止a标签跳转直接外部链接 ===', e.target.href)e.stopPropagation()e.preventDefault()this.$router.push({path: e.target.href});}

本来一切都进行的ok了,功能也都实现了,但突然发现有一个致命的问题:如果配置了{ path: '*', component: NotFound }匹配404界面,那以上全局路由守卫的代码完全就失效了,没有任何意义,跳外链的时候直接就匹配到404的路由上去了

失效了💀💀💀💀💀💀💀💀💀💀💀💀💀💀

最终解决方案如下👇👇👇👇👇👇👇👇👇👇👇👇:

进行路由动态匹配,通过“路由独享的守卫”来控制重定向到询问页面,关键代码如下:

// 将匹配以 `/http` 开头的所有路由{ path: '/http:afterUser(.*)',redirect: to => { // 带参数重定向// console.log(to)let tempLinkUrl=to.pathif(tempLinkUrl.indexOf('/')!=-1&&tempLinkUrl.substr(0,1)=='/'){tempLinkUrl=tempLinkUrl.substr(1)}// 方法接收目标路由作为参数// return 重定向的字符串路径/路径对象return { path: '/linkWeb', query: { target:tempLinkUrl } }}},

把全局导航路由守卫恢复如初:

 前端路漫漫,菜鸟还需加油冲,完结撒花!🌸🌸🌸🌸🌸🌸

相关文章:

前端vue实现系统拦截跳转外链并进入跳转询问界面

跳转询问界面如下图所示&#xff1a; 给自己挖坑的实现方式&#xff0c;最终解决方案请看最底下 思路&#xff1a;正常情况下我们有2种方式跳转外链 第一种非a标签&#xff0c;我们手动添加事件进行跳转 <div class"dingdan public-padding p-item" click&quo…...

【Linux】Shell(Bash)单引号、双引号、不加引号和反引号用法和区别详解

简要总结 不加引号&#xff1a;不会将含有空格的字符串视为一个整体输出, 如果内容中有变量等&#xff0c;会先把变量解析出结果&#xff0c;然后在输出最终内容来&#xff0c;如果字符串中带有空格等特殊字符&#xff0c;则不能完整的输出&#xff0c;需要改加双引号&#xff…...

本人使用的idea插件

文章目录&#x1f68f; 本人使用的idea插件&#x1f6ac; pojo to Json&#x1f6ac; GsonFormatPlus&#x1f6ac; EasyYapi&#x1f6ac; Chinese (Simplified) Language Pack / 中文语言包&#x1f6ac; MyBatis Log Free&#x1f6ac; MyBatisPlusX&#x1f6ac; Statistic…...

站在行业C位,谷医堂打开健康管理服务新思路

对于农村及贫困地区老百姓来说&#xff0c;由于交通因素和家庭经济条件制约&#xff0c;看病难致身体调理情况一直不太乐观&#xff0c;这也导致心理压力很大。然而&#xff0c;随着近年中医药产业崛起与快速发展&#xff0c;这种局面很快就会得到改观&#xff0c;以湖南谷医堂…...

ABO溶血症概率

[简介]ABO溶血是由于母亲和胎儿ABO血型不合引起的新生儿溶血&#xff0c;概率不是很大&#xff0c;一般出现在准妈妈是O血&#xff0c;准爸爸是非O血&#xff0c;这次容易发生血型不合&#xff0c;但新生儿ABO溶血概率不高&#xff0c;大多数症状相对较轻。ABO溶血的概率是什么…...

【算法数据结构体系篇class03】:数组、链表、栈、队列、递归时间复杂度、哈希表、有序表问题

一、反转链表package class03;import java.util.ArrayList; import java.util.List;/*** 链表反转*/ public class ReverseLinkedList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {p…...

【新2023】华为OD机试 - 最多提取子串数目(Python)

最多提取子串数目 题目 给定由 [a-z] 26 个英文小写字母组成的字符串 A 和 B,其中 A 中可能存在重复字母,B 中不会存在重复字母 现从字符串 A 中按规则挑选一些字母,可以组成字符串 B。 挑选规则如下: 1) 同一个位置的字母只能被挑选一次 2) 被挑选字母的相对先后顺序不…...

嵌入式C语言设计模式 --- 代理模式

1 - 什么是代理模式? 代理模式(Proxy Pattern),是指当客户端无法访问某个对象或者访问某个对象存在困难的时候,可以通过一个代理对象来进行间接访问。 举一个生活中的例子,比如,我们在买火车票或者飞机票的时候,有时候不会直接在12306或者航空公司官网上面购买,而是…...

前端性能优化的整理笔记

&#x1f6b4; 前言大厂面试题分享 面试题库后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库&#x1f3c4;利用碎片化的时间&#xff0c;系统的整理&#xff0c;性能优化的知识点。&#x1f3af; 前端性能优化&#xf…...

springboot+mybatis连接数据库实现增删改查功能

springbootmybatis连接数据库实现增删改查功能创建表创建项目实体类DAO接口写sql的XML文件Service层Controller启动类结果目录结构参考博客创建表 create table user(id int ,name varchar(30),pwd varchar(40) )insert into user values(2,hxf,789101),(3,hlm,789102),(4,hzh…...

疑似45亿地址信息泄露事件跟进后续

开放隐私计算 收录于合集#数据安全13个开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神&#xff0c;专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播&#xff0c;愿成为中国 “隐私计算最后一公里的服务区…...

Hadoop集群配置

一、系统文件配置集群部署规划NameNode和SecondaryNameNode不要安装在同一台服务器ResourceManager也很消耗内存&#xff0c;不要和NameNode、SecondaryNameNode放在同一台机器上。这里装了四台机器&#xff0c;ant151,ant152,ant153,ant154。ant151ant152ant153ant154NameNode…...

【C语言】程序环境和预处理|预处理详解|定义宏(下)

主页&#xff1a;114514的代码大冒 qq:2188956112&#xff08;欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ &#xff09; Gitee&#xff1a;庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 2.5带副作用的宏参数 2.6宏和函数的对比 3#undef ​编辑 4 命令行定义…...

MySQL主从复制

操作流程准备两个服务器主服务器配置1>修改主配置文件 /etc/my.cnf[mysald] log-binmysql-bin //[必须]启用二进制日志server-id12>重启 mysql 服务3>创建mysql用户并授权mysql> GRANT REPLICATION SLAVE ON ** to slaver% identified by 123456;4>查看当前主服…...

做自媒体视频变现的三大要素!

大家都知道做自媒体可以赚钱&#xff0c;做得好的话收入会远超自己的工资&#xff01; 但有些关键点你真的知道吗&#xff1f;有几点是新手很容易忽略的&#xff01; 1、内容价值 我们所创作的内容是否是用户所需要的&#xff1f;用户是不是有强烈的需求&#xff1f;这一点你…...

软件测试如何获得高薪?

软件测试如何获得高薪&#xff1f; 目录&#xff1a;导读 测试基础理论/测试设计能力 业务知识 行业技术知识 数据库 掌握编程语言 搞定自动化测试 质量流程管理 下面谈谈不同level的测试工程师应具备的基本能力 第一个&#xff1a;我们称之为测试员/测试工程师 第二…...

《真象还原》读书笔记——第五章 保护模式进阶,向内核迈进(特权级,更新)

5.4 特权级深入浅出 5.4.1 特权级哪点事 计算机 访问 可分为访问者和被访问者。 建立特权机制为了通过特权来检查合法性。 0、1、2、3级&#xff0c;数字越小&#xff0c;权力越大。 0特权级是系统内核特权级。 用户程序是3特权级&#xff0c;被设计为“有需求就找操作系统”…...

艾德卡EDEKA EDI 需求分析

艾德卡Edeka 是德国最大的食品零售商&#xff0c;因其采用“指纹付款”的方式进行结算&#xff0c;成为德国超市付款方式改革的先驱。2022年8月&#xff0c;入选2022年《财富》世界500强排行榜&#xff0c;位列第256位。 艾德卡EDEKA EDI需求分析 传输协议 在传输协议层面&a…...

python如何使用最简单的方式将PDF转换成Word?

由于PDF的文件大多都是只读文件&#xff0c;有时候为了满足可以编辑的需要通常可以将PDF文件直接转换成Word文件进行操作。 看了网络上面的python转换PDF文件为Word的相关文章感觉都比较复杂&#xff0c;并且关于一些图表的使用还要进行特殊的处理。 本篇文章主要讲解关于如何…...

HashMap如何避免内存泄露问题

HashMap对于Java开发人员来说&#xff0c;应该是一种非常非常熟悉的数据结构了&#xff0c;应用场景相当广泛。 本文重点不在于介绍如何使用HashMap&#xff0c;而是关注在使用HashMap过程中&#xff0c;可能会导致内存泄露的情况&#xff0c;下面将以示例的形式展开具体介绍。…...

Python实战:温度转换小工具开发(附GESP考试真题解析)

Python实战&#xff1a;温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例&#xff0c;也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具&#xff0c;同时深入解析GESP考试中可能遇到的类似题型&#xff0c;帮助初学者掌握Pytho…...

双屏生产力拉满!YogaBook 9i 多屏操作玩法与效率指南

YogaBook 9i 凭借独特的双屏设计&#xff0c;打破了传统笔记本的使用边界&#xff0c;成为移动办公、创意创作、高效学习的热门机型。但很多用户拿到手后&#xff0c;只把它当作普通笔记本使用&#xff0c;没能发挥双屏协同的真正优势&#xff0c;多任务处理、分屏操作、跨屏交…...

Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十八):云原生部署——Docker + K8s + GraalVM Native Image,让Java真正飞在云端

系列导航 | ← 上一篇:D17 Boot 3 → Boot 4 迁移避坑指南 | 下一篇:D19 微服务:Boot 4 + Spring Cloud 2026.x → 适用读者:有Docker基础、正在或准备将Spring Boot应用部署到K8s的中高级开发者。 前置知识:Docker基础、Linux基础、了解K8s核心概念。 本文代码:GitHub G…...

AI语音智能体赋能12345热线,实现政务服务数智化

12345政务服务便民热线作为连接政府与群众的“连心桥”&#xff0c;承载着政策咨询、诉求举报、民生求助等核心职能&#xff0c;是政务服务的重要窗口。但随着民生需求日益多元&#xff0c;传统12345热线逐渐面临话务高峰拥堵、人工座席压力大、响应效率不均、诉求闭环不及时等…...

终极指南:如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术

终极指南&#xff1a;如何在ComfyUI中掌握IPAdapter Plus图像风格迁移技术 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus 在AI图像生成领域&#xff0c;ComfyUI IPAdapter Plus插件正在成为图像风格迁…...

OpenClaw自动化邮件分类:GLM-4.7-Flash智能收件箱管理

OpenClaw自动化邮件分类&#xff1a;GLM-4.7-Flash智能收件箱管理 1. 为什么需要智能邮件管理 每天早晨打开邮箱&#xff0c;看到堆积如山的未读邮件总是让人头疼。重要客户的需求可能被埋没在促销广告中&#xff0c;团队协作的紧急邮件可能混在订阅通知里。作为一名长期被邮…...

TrollInstallerX终极指南:一键在iOS设备上安装TrollStore的完整教程

TrollInstallerX终极指南&#xff1a;一键在iOS设备上安装TrollStore的完整教程 【免费下载链接】TrollInstallerX A TrollStore installer for iOS 14.0 - 16.6.1 项目地址: https://gitcode.com/gh_mirrors/tr/TrollInstallerX 您是否一直在寻找一种简单可靠的方法&am…...

像素幻梦维度参数面板详解:精准调控每一粒像素的生成逻辑

像素幻梦维度参数面板详解&#xff1a;精准调控每一粒像素的生成逻辑 1. 像素幻梦创意工坊简介 Pixel Dream Workshop&#xff08;像素幻梦创意工坊&#xff09;是一款基于FLUX.1-dev扩散模型的像素艺术生成工具。它采用独特的16-bit现代明亮风格界面设计&#xff0c;为创作者…...

网易云音乐无损音乐下载器:5分钟搞定你的私人音乐库终极方案

网易云音乐无损音乐下载器&#xff1a;5分钟搞定你的私人音乐库终极方案 【免费下载链接】NeteaseCloudMusicFlac 根据网易云音乐的歌单, 下载flac无损音乐到本地.。 项目地址: https://gitcode.com/gh_mirrors/nete/NeteaseCloudMusicFlac 还在为网易云音乐的无损音乐无…...

语音端点检测VAD的深度学习进化:从传统方法到RNN的实战对比

语音端点检测VAD的深度学习进化&#xff1a;从传统方法到RNN的实战对比 在嘈杂的咖啡馆里&#xff0c;语音助手能否准确识别你的唤醒词&#xff1f;视频会议中&#xff0c;系统如何智能过滤键盘敲击声&#xff1f;这些场景的核心技术&#xff0c;都离不开语音端点检测&#xff…...