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

浏览器 路由详解

Hash路由

  • ​​URL 结构​​:http://example.com/#/path,# 后的部分称为哈希(Hash)。
  • ​​无刷新特性​​:浏览器不会将哈希部分发送到服务器,改变哈希值不会触发页面刷新。
  • ​​事件驱动​​:URL 哈希部分变化, 监听 hashchange 事件,动态更新页面内容。

hashchange 事件​:

  • ​​作用​​:监听 URL 哈希值变化,触发页面更新。
    ​​示例​​:
window.addEventListener('hashchange', () => {const currentHash = window.location.hash.substring(1); // 去掉 "#" 符号console.log('当前路径:', currentHash); // 如 "/home"renderPage(currentHash); // 根据路径渲染页面
});

​​手动触发哈希变化​:

  • 直接修改 window.location.hash 会触发 hashchange 事件:
// 跳转到 "#/profile"
window.location.hash = '/profile';

History 路由

  • ​​URL 结构​​:http://example.com/path,路径与真实 URL 一致。
  • ​无刷新跳转​​:通过 pushState() replaceState() 修改历史记录,不会触发页面重载。
  • 事件驱动​​:监听 popstate 事件响应浏览器前进/后退操作。
  1. ​​history.pushState(state, title, url)​​
    ​​作用​​:向浏览器历史记录栈​​添加新记录​​,URL 更新但页面不刷新。
    ​​参数​​:
    • state:与当前记录关联的状态对象(可用于 popstate 事件恢复页面状态)。
    • title:大多数浏览器忽略此参数,可传空字符串。
    • url:新路径(需符合同源策略)。
history.pushState({ page: 1 }, '', '/page1'); // URL 变为 /page1
  1. history.replaceState(state, title, url)​​
    ​​作用​​:​​替换当前历史记录​​,不添加新条目。
history.replaceState({ page: 2 }, '', '/page2'); // 当前记录替换为 /page2
  1. popstate 事件​
    触发条件​​:用户点击浏览器 前进/后退 按钮,或调用 history.back() / history.forward()。
    ​​注意​​:直接调用 pushState() replaceState() ​​不会触发​​此事件。
// 前进/后退, 会触发popstate事件
window.addEventListener('popstate', () => {const path = window.location.pathname;renderPage(path);
});

pushState() 和 replaceState() 的本质作用
这两个方法属于 HTML5 History API,核心功能是 ​​操作浏览器历史记录栈​​:

  • ​​pushState()​​:向历史记录栈中添加一个新条目。
  • ​​replaceState()​​:替换当前历史记录栈中的条目。
    ​​共同特性​​:
    • 仅修改 URL 和历史记录,​​不会刷新页面​​。
    • ​​不会触发任何事件​​(包括 popstate)。
    • ​​不会自动更新页面内容​​。

要让页面“跳转”(即内容切换),需开发者 ​​手动将 URL 与页面状态同步​​,或者利用路由库(封装底层 API,实现 URL 与组件的自动同步)。

⚠️ history路由注意刷新404问题

  • History模式(如HTML5 History API)使用真实的URL路径(如example.com/user/profile ),当用户刷新页面时,浏览器会向服务器请求这个完整路径。如果服务器没有配置正确的路由处理,就会返回404错误,因为服务器上可能并不存在这个物理路径对应的资源。
  • Hash模式使用URL哈希值(如example.com/#/user/profile ),浏览器在请求时只会发送哈希值前面的部分(example.com/ )到服务器,哈希值部分(#/user/profile )不会被发送。因此无论哈希值如何变化,服务器始终接收到的是同一个请求,不会出现404问题。

相关文章:

浏览器 路由详解

Hash路由 ​​URL 结构​​:http://example.com/#/path,# 后的部分称为哈希(Hash)。​​无刷新特性​​:浏览器不会将哈希部分发送到服务器,改变哈希值不会触发页面刷新。​​事件驱动​​:URL…...

Scala面向对象2

1. 抽象属性和方法:用 abstract 关键字定义抽象类,其中抽象属性无初始值,抽象方法无实现 。重写抽象方法需用 override ,重写抽象属性时,可变属性用 var ,不可变属性用 val 。 匿名子类:和 Jav…...

【FPGA基础学习】状态机思想实现流水灯

目录 一、用状态机实现LED流水灯1.状态机思想简介1. 1基本概念1.2.核心要素1.3分类与模型 2.LED流水灯 二、CPLD与FPGA1.技术区别2.应用场景3.设计选择建议 三、HDLbits组合逻辑题目 一、用状态机实现LED流水灯 1.状态机思想简介 1. 1基本概念 ​ 状态机(Finite …...

HTML表单属性2

HTML5针对<input>添加了许多属性&#xff1a; autofocus属性 页面加载时自动聚焦到输入字段 <form action"action_page.php" >名字&#xff1a; <input type"text" name"fnam" autofocus><br>姓氏&#xff1a;<in…...

图片尺寸修改软件下载

【图片尺寸调整工具v1.0&#xff1a;高效便捷的图像处理助手】 图片尺寸调整工具v1.0是一款专为简化图像处理流程设计的轻量级软件&#xff0c;兼顾高效批量处理与个性化单图调整需求。该工具以"零学习成本"为核心设计理念&#xff0c;通过简洁直观的交互界面&#…...

202521 | 远程调用 | 注册中心

远程调用 1. 核心方案全景图 #mermaid-svg-f3oyP1p2P8a2lAuW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-f3oyP1p2P8a2lAuW .error-icon{fill:#552222;}#mermaid-svg-f3oyP1p2P8a2lAuW .error-text{fill:#55222…...

MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型,表结构-查询SQL、修改SQL、删除SQL

一.SQL SQL&#xff1a;一门操作关系型数据库的编程语言&#xff0c;定义操作所有关系型数据库的统一标准 二. DDL-数据库 1. 查询所有数据库 命令&#xff1a;show databases; 2. 查询当前数据库 命令&#xff1a;select database(); 3. 创建数据库 命令&#xff1a;create da…...

网络钓鱼攻击的威胁和执法部门的作用(第一部分)

在当今的数字世界中&#xff0c;网络犯罪分子不断开发新技术来利用个人、企业和政府机构。 最普遍和最具破坏性的网络犯罪形式之一是网络钓鱼——一种社会工程手段&#xff0c;用于欺骗人们提供敏感信息&#xff0c;例如登录凭据、财务数据和个人详细信息。 随着网络钓鱼攻击…...

鸿蒙版(ArkTs) 贪吃蛇,包含无敌模式 最高分 暂停和继续功能

鸿蒙版(ArkTs) 贪吃蛇&#xff0c;包含无敌模式 最高分 暂停和继续功能; 效果图如下&#xff1a; 代码如下&#xff1a; // 所有import语句必须放在文件开头 import router from ohos.router; import promptAction from ohos.promptAction; // Add this import at the top wit…...

设计模式简述(十三)适配器模式

适配器模式 描述基本使用使用关于适配器关联不兼容类的方式如果原有抽象层是抽象类若原有抽象是接口使用 描述 适配器模式常用于系统已经上限稳定运行&#xff0c;但现有需求需要将两个不匹配的类放到一起工作时使用。 也就是说这是一个迭代阶段使用的模式。 这种模式&#x…...

4月6日随笔

一觉起来十点多 其实六点和九点分别醒过一次。 起来之后点了个侍卫草推荐的猪排饭&#xff0c;真的巨好吃&#xff0c;猪排很脆&#xff0c;溏心蛋也很香 但是因为酒店十二点半要退房&#xff0c;就匆匆吃完了猪排和一半米饭就走了 今天下午在科技楼写了一会作业&#xff0c…...

Spring Boot 3.4.3 和 Spring Security 6.4.2 实现基于内存和 MySQL 的用户认证

在 Web 应用开发中&#xff0c;用户认证是保障系统安全的基础需求。Spring Boot 3.4.3 结合 Spring Security 6.4.2 提供了强大的安全框架支持&#xff0c;可以轻松实现基于内存或数据库的用户认证功能。本文将详细介绍如何在 Spring Boot 3.4.3 中集成 Spring Security 6.4.2&…...

多款CANFD芯片单粒子效应对比分析

一、引言 随着航天、工业自动化等领域的快速发展&#xff0c;通信芯片在各种复杂环境下的可靠性变得至关重要。单粒子效应&#xff08;Single Event Effect,SEE&#xff09;是空间辐射环境中影响半导体器件性能的重要因素之一。CANFD&#xff08;Controller Area Network with…...

解决Win11耳机没有声音的问题

方法一&#xff1a;更新驱动程序&#xff08;有效&#xff09; 进入 “设置”&#xff08;快捷键&#xff1a;WinX&#xff09;&#xff0c;点击 “Windows 更新” → “高级选项” 点击 “可选更新” &#xff0c;然后点击 “驱动程序更新” 【注】&#xff1a;更新后可能会出…...

【spring02】Spring 管理 Bean-IOC,基于 XML 配置 bean

文章目录 &#x1f30d;一. bean 创建顺序&#x1f30d;二. bean 对象的单例和多例❄️1. 机制❄️2. 使用细节 &#x1f30d;三. bean 的生命周期&#x1f30d;四. 配置 bean 的后置处理器 【这个比较难】&#x1f30d;五. 通过属性文件给 bean 注入值&#x1f30d;六. 基于 X…...

内网渗透(杂项集合) --- 中的多协议与漏洞利用技术(杂项知识点 重点) 持续更新

目录 1. NetBIOS 名称的网络协议在局域网中内网渗透中起到什么作用 2. 使用 UDP 端口耗尽技术强制所有 DNS 查找失败&#xff0c;这个技术如何应用在局域网内网渗透测试中 3. 在本地创建一个 HTTP 服务来伪造 WPAD 服务器 什么是 WPAD 服务器&#xff1f;这个服务器是干嘛的…...

el-tabs添加按钮增加点击禁止样式

前置文章 一、vue使用element-ui自定义样式思路分享【实操】 二、vue3&ts&el-tabs多个tab表单校验 现状确认 点击添加按钮&#xff0c;没有点击样式&#xff0c;用户感知不明显没有限制最大的tab添加数量&#xff0c;可以无限添加 调整目标&代码编写 调整目标…...

LINUX 5 vim cat zip unzip

dd u撤销 ctrlr取消撤销 q!刚才的操作不做保存 刚才是编辑模式 现在是可视化模式 多行注释...

PDFBox渲染生成pdf文档

使用PDFBox可以渲染生成pdf文档&#xff0c;并且自定义程度高&#xff0c;只是比较麻烦&#xff0c;pdf的内容位置都需要手动设置x&#xff08;横向&#xff09;和y&#xff08;纵向&#xff09;绝对位置&#xff0c;但是每个企业的单据都是不一样的&#xff0c;一般来说都会设…...

Batch Normalization:深度学习训练的加速引擎

引言 在深度学习的发展历程中&#xff0c;训练深度神经网络一直是一项极具挑战性的任务。随着网络层数的增加&#xff0c;梯度消失、梯度爆炸以及训练过程中的内部协变量偏移&#xff08;Internal Covariate Shift&#xff09;问题愈发严重&#xff0c;极大地影响了模型的收敛…...

低空经济基础设施建设方向与展望

随着科技的不断进步&#xff0c;低空经济正逐渐成为推动国家经济发展的新引擎。低空经济&#xff0c;指的是在低空范围内进行的各种经济活动&#xff0c;包括但不限于无人机物流、空中交通管理、低空旅游、农业监测等。本文将探讨低空经济基础设施建设的方向与未来展望。 1. 低…...

如何保证RabbitMQ消息的可靠传输?

在这个图中&#xff0c;消息可能丢失的场景是1&#xff0c;2&#xff0c;3 1.在生产者将消息发送给RabbitMQ的时候&#xff0c;消息到底有没有正确的到达服务器呢&#xff0c;RabbitMQ提供了两种解决方案&#xff1a; a. 通过事务机制实现&#xff08;比较消耗性能&#xff0…...

Kotlin语言进阶:协程、Flow、Channel详解(二)

Kotlin语言进阶:协程、Flow、Channel详解(二) 一、Flow基础 1.1 什么是Flow Flow是Kotlin提供的用于处理异步数据流的解决方案,它建立在协程之上,具有以下特点: 冷流特性:只有在收集时才会开始发射数据背压处理:自动处理生产者和消费者速度不匹配的问题组合操作:提…...

Sentinel核心源码分析(上)

文章目录 前言一、客户端与Spring Boot整合二、SphU.entry2.1、构建责任链2.2、调用责任链2.2.1、NodeSelectorSlot2.2.2、ClusterBuilderSlot2.2.3、LogSlot2.2.4、StatisticSlot2.2.5、AuthoritySlot2.2.6、SystemSlot2.2.7、FlowSlot2.2.7.1、selectNodeByRequesterAndStrat…...

Systemd安全加密备份系统与智能通知

实训背景 你是一家金融科技公司的系统架构师&#xff0c;需为敏感数据设计一套安全备份系统&#xff0c;满足以下需求&#xff1a; 加密存储&#xff1a;自动解密插入的LUKS加密USB设备&#xff0c;挂载到安全目录。备份验证&#xff1a;备份完成后校验文件完整性&#xff0c…...

6.0 使用Qt+ OpenCV+Python加载图片

本例作为python图像处理的入门课程1,使用Qt+ OpenCV+Python加载图片。 主要有如下几个地方需要注意: 1. OpenCV 默认使用 BGR 格式,而 Qt 使用 RGB。显示前需要转换:cv2.cvtColor(img, cv2.COLOR_BGR2RGB),一般使用某个QLabel控件进行显示。 pic = cv2.cvtColor(pic, cv2.C…...

深度学习篇---网络分析(1)

文章目录 前言1. ImprovedResBlock&#xff08;改进的残差块&#xff09;结构组成卷积层1卷积层2跳跃连接&#xff08;Downsample&#xff09; 前向传播流程主路径跳跃路径残差连接 2. EnhancedCNN&#xff08;主模型&#xff09;2.1 初始特征提取层功能参数变化 2.2 残差块堆叠…...

【Mac 从 0 到 1 保姆级配置教程 11】- Mac 基础配置 Finder、触控板、常用快捷键等

文章目录 前言配置 Finder1. 把我们的家目录请出来2. 显示文件扩展名3. 展示隐藏文件4. 显示路径栏和状态栏5. 固定文件夹到工具栏 基础快捷键1. Finder 导航快捷键2. 文件操作快捷键3. 视图和显示快捷键4. 搜索和选择快捷键5. 实用技巧6. 关于文件创建 配置触控板1. 右键设置2…...

C++Primer - 动态内存管理

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

DeepSeek本地部署(Ollama)

1. Ollama 安装 Ollama 官网地址&#xff1a; https://ollama.com/安装包网盘地址: https://pan.baidu.com 2. Deepseek 部署 根据自己电脑配置和应用需求选择不同模型&#xff0c;配置不足会导致运行时候卡顿。 版本安装指令模型大小硬盘&#xff08;存储&#xff09;显卡…...