码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • javascritp如何判断是从刷新(重新加载)、正常打开(或链接打开)、还是从浏览器回退进入页面的


    重点先下另外一个知识点:

    在我们的Web站点采用主体页面的iframe导航各个子页面(浏览器地址在不pushState或replaceState时将保持不变)的情况,当iframe中通过变更src属性值变更打开的子页面时,浏览器会自动添加一条可回退的历史记录,后续能够在浏览器中点击后退按钮或在主体页面history.go(-1)进行回退和前进页面。这种情况有可能是我们希望的,也有可能是我们不希望出现的(比如用来模拟tab页的情况)。

    那如何控制iframe子页面切换时不增加历史记录呢?

    1. 最简单的方式:切换src时重新渲染iframe(https://www.jianshu.com/p/90c228f6bcb0):

    vue中,直接给iframe加一个key属性:       

     <iframe :src="srcUrl" :key="src" />

    由于vue中的key更改时会重新渲染这个组件,因此这个方法是可行的。我们直接将src值赋值给key就可以实现切换src时重新渲染iframe了。

    2. 不通过iframe的src属性值切换子页面,而是采用“iframe.contentWindow.location.replace” (https://blog.csdn.net/WMW_wmw/article/details/127344807):

    1. watch: {
    2.   'srcUrl'(newValue, oldValue) {
    3.     setTimeout(() => {
    4.       let iframe = this.$refs.iframe
    5.       if (newValue !== undefined && newValue !== null && iframe !== undefined) {
    6.         iframe.contentWindow.location.replace(newValue)
    7.       }
    8.     }, 50)
    9.   }
    10. },

    以下代码则是向浏览器的回退历史栈增加一个记录,但浏览器不会在调用 pushState() 之后尝试加载该方法指定的地址(注意:新的URL可以是绝对路径或相对路径,但必须与当前 URL 同源,如果该参数没有指定,则将其设置为当前文档的 URL):

    history.pushState(null, '', window.location);  //这里的URL参数为window.location

    更复杂的情况可以参考本人之后转载的另一篇文章:点击iframe中的链接时,使用历史记录pushState更改父窗口的URL-CSDN博客

    嵌入 iframe 的页面 history 流程(浏览器后退)

    https://www.jianshu.com/p/4c7eb9534677/

     关于popState事件:

    摘自:https://www.cnblogs.com/NaN-prototype/p/14308503.html

    接下来,我们再说说标题所说的问题,如何判断页面是从刷新(重新加载)、正常打开(或链接打开)、还是从浏览器回退进入的?

    过去可以直接使用以下方法,不过该方法利用的window.performance.navigation.type属性已经在新的标准中废弃,:

    JS怎么判断页面是从前一个页面后退回来的 - 百度文库

    可以参照以下该方法:

    javascript - React - 如何检测页面刷新和重定向用户 - IT工具网

    javascript - React - How to detect Page Refresh and Redirect user - Stack Overflow

    参考资料:

    https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming/type

    https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigation/type

    https://developer.mozilla.org/en-US/docs/Web/API/Performance

    https://developer.mozilla.org/en-US/docs/Web/API/performance_property

    https://developer.mozilla.org/zh-CN/docs/Web/API/performance_property

  • 相关阅读:
    灵感乍现!造了个与众不同的Dubbo注册中心扩展轮子
    CSDN常用复杂公式模板记录
    外汇天眼:3天80%收益!推荐人还有10%的推荐奖金!CoinFxOnline被警告!
    积木报表 JimuReport v1.6.2-GA版本发布—高危SQL漏洞安全加固版本
    elasticsearch、Kibana 与logstash分布式使用方案(珍藏版)
    HTML5期末考核大作业,网站——旅游景点。 学生旅行 游玩 主题住宿网页
    Vue太难啦!从入门到放弃day06——Vue前端路由
    csp 202212-2 训练计划
    掌控未来,爱普生SR3225SAA用于汽车钥匙、射频电路的智慧引擎
    记一次SQL注入的收获
  • 原文地址:https://blog.csdn.net/carcarrot/article/details/132763367
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号