首页
学习
活动
专区
圈层
工具
发布

如何制作自己的原生 JavaScript 路由

每当在浏览器的地址栏中输入新的 URL,但我们不想刷新页面时,就会发生这种情况,我们只是想通过加载新内容来刷新视图。 你可以选择将路由存储在 routes[] 数组中。...太糟糕了,因为单击浏览器的“后退”和“前进”按钮与浏览历史记录中的 URL 导航有关。如果没有 History API,就无法谈论路由。...当用户按下浏览器的 Forward 按钮时,将执行 history.forward(),它等效于 history.go(1)”。...这就是使浏览器无需重新加载页面即可更改 URL 的原因。 结果:现在,每次我们单击按钮时,URL 实际上都会在浏览器的地址栏中更改。内容框也会更新。 ? 我们的原生 JS 路由开始运行了。...(第一次是我们单击按钮时。) 但是由于该事件带有单击的 id,因此单击 Back 或 Forward 时很容易刷新视图并重新加载内容。

5.6K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    ajax无刷新页面切换,历史记录后退前进解决方案

    问题描述 我们在工作中常常遇到需要用ajax来显示下一页和上一页,ajax可以不刷新页面进行操作!但是,假如你想通过浏览器的历史记录返回上一页和下一页。那么ajax默认是做不到的!...window.onpopstate history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,并且页面无刷的时候(由于使用pushState修改了history)会触发popstate...而当有浏览者点击浏览器“后退”或“前进”按钮时,我们用下面的代码来响应用户的操作: window.onpopstate = function(event){ if(event.state){...,火狐浏览器,Safafi浏览器、IE10+等现代浏览器都支持这种技术。...操作方法就是: window.history.pushState({"html": datahtml, pageTitle: titlehtml, id: id}, "", lurl); 把我们的数据存到

    1.7K30

    Vue项目中阻止返回,弹出提示框,包括安卓、iOS物理返回

    在一个移动端项目中,有一个需求,在未输入内容时点击返回(包括安卓、iOS等终端设备的物理返回按钮),弹窗提示,并且阻止返回上一个页面。...比较反人类的一种操作,不过只要能想到的就没有代码做不到的,在网上找到一个解决方案: mounted() {   // 按需使用:在页面一进来的时候,添加一个历史记录   window.history.pushState...window.addEventListener("popstate", this.onBrowserBack, false); }, destroyed() {   // 页面销毁时必须要移除这个事件,vue 不刷新页面...添加一个历史,供返回键使用   PopupShow: {     handler(newVal, oldVal) {       if (newVal.Terms === true) {         window.history.pushState

    3.7K10

    简易路由实现——(history路由)

    只有在做出浏览器动作时,才会触发该事件,如用户点击浏览器的回退按钮(或者在 Javascript 代码中调用 history.back() 或者 history.forward() 方法) 不同的浏览器在加载页面时处理...== window.location.pathname) { window.history.pushState(path, '', path); this.refresh...window.history.replaceState(path, '', path); this.replaceRouter = false; } else window.history.pushState...但是在这里发现一个问题,当处于某个路由时,刷新页面,会出现下面这种情况 ? 一刷新就会出现404,在 vue-router官方文档 中也有介绍,开启 history 需要服务端支持!...因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 oursite.com/user/id 就会返回 404,这就不好看了。

    1.7K10

    ajax全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。...异步的JavaScript: 使用 【JavaScript语言】 以及 相关【浏览器提供类库】 的功能向服务端发送请求,当服务端处理完请求之后,【自动执行某个JavaScript的回调函数】。...iframe标签     iframe标签可以在他下生成一个新的html页面,能够实现局部刷新,其余地方不刷新本业面不刷新,其余地方不刷新,只有iframe底下的那块刷新   先看看利用iframe动态生成页面的效果...,其余地方不刷新 //本业面不刷新,其余地方不刷新,只有iframe底下的那块刷新 function changeSrc() { var inp=...,要是要做好看的话只能通过z-index和opacity要在这个按钮下面给一个自定义样式,原按钮透明度为0,这样我们看到的就是下面的美样式,而点的就是那个丑的要死的 5、JSONP 1 2

    4.1K20

    【JavaScript 教程】浏览器—History 对象

    // 后退到前一个网址 history.back() // 等同于 history.go(-1) 浏览器工具栏的“前进”和“后退”按钮,其实就是对 History 对象进行操作。...history.go(0); // 刷新当前页面 注意,移动到以前访问过的页面时,页面通常是从浏览器缓存之中加载,而不是重新要求服务器发送新的网页。...window.history.pushState(state, title, url) 该方法接受三个参数,依次为: state:一个与添加的记录相关联的状态对象,主要用于popstate事件。...这时,在地址栏输入一个新的地址(比如访问google.com),然后点击了倒退按钮,页面的 URL 将显示2.html;你再点击一次倒退按钮,URL 将显示1.html。...注意,仅仅调用pushState()方法或replaceState()方法 ,并不会触发该事件,只有用户点击浏览器倒退按钮和前进按钮,或者使用 JavaScript 调用History.back()、History.forward

    1.5K10

    Web 游戏监听浏览器返回点击事件 !

    事件监听 当浏览器活动历时记录条目更改时,将触发 popstate 事件,如用户点击浏览器的回退按钮,或者在 javascript 代码中调用 history.back() 或者 history.forward...history.pushState() 方法,是向当前浏览器会话的历史堆栈中添加一个状态 (state) ,添加以后,点击浏览器的返回,会消耗掉会话历史堆栈中栈顶的状态,也就是我们注册的最新的状态。...let state = { title: "title", url: null }; window.history.pushState(state, "title", null);...其中 title 是标题,目前浏览器基本上是忽略这个参数,可以不管,url 是跳转地址,游戏内不需要跳转其他地址,直接传 null 即可。...onBackClick); let state = { title: "title", url: null }; window.history.pushState

    2.3K10

    史上最全的AJAX

    概述 对于web应用程序:用户浏览器发送请求.服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML),渲染并显示浏览器上· Ajax和Form表单提交数据的的好处有以下两种...· · 异步的JavaScript:   使用[JavaScript语言]以及相关[浏览器提供类库]的功能向服务端发送请求,当服务端处理请求之后,[自动执行某个JavaSript的回调函数]· PS:以上请求和响应的整个过程是...Number readyState 状态值(整数) 详细: 0-未初始化,尚未调用open()方法; 1-启动,调用了open()方法,未调用send()方法;...1·简单请求:一次请求  2·非简单请求:两次请求,在发送数据之前会会先发一次请求用于做“预检”,只有“预检”通过后才再发送一次请求用于数据传输· *关于“预检”*   请求方式:OPTIONS   "...预检":其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要的发送的消息·   如何“预检”:      如果复杂请求是PUT等请求,则服务端需要设置允许某请求,否则“预检”不通过

    4.9K20

    浅谈移动端页面无刷新跳转问题的解决方案

    浅谈移动端页面无刷新跳转问题的解决方案 2017-12-22  祈澈姑娘 最近开发微信公众号,用的框架是 一般的 UI,但是涉及到多页面之间的相互跳转的问题,降低了浏览器的性能,用户体验特别不好,卡顿,...得益于ajax,我们可以实现无跳转刷新,又多亏了浏览器的histroy机制,我们用hash的变化从而可以实现推动界面变化。...所以,简而言之可以这样理解:改变#后面的值不触发网页重载,但会记录到浏览器history中去。 原理:修改hash的方式实现历史记录(浏览器对hash的修改会记录历史记录) 遵循一种原则,界面无刷新。...监听地址栏中hash变化驱动界面变化它们的变化记录浏览器会保存在history中,可以通过回退/前进按钮找回,或者history对象中的方法控制。...window.history.pushState:方法:为histroy建立历史记录,该方法传入三个函数 1、对应url的信息 2、下一个界面的title 3 、需要你动态改变的地址栏中的url.

    4.3K40

    LocalStorage 设置过期时间?

    1、如何不刷新页面改版URL参数 window.history.pushState(state,title,url) pushState() 带有三个参数: 一个状态对象, 一个标题, 以及一个可选的...浏览器的地址栏将显示这个网址。 title:新页面的标题。但是,现在所有浏览器都忽视这个参数,所以这里可以填空字符串。...2、根据数量计算换行显示展开收起 1、需求如图 1111.png 在一行超过指定数量后,可能数量超过,也可能单个文字长度达到,出现展开按钮。...2、计算每一个标签的宽度,超过指定宽度显示展开按钮。 3、vue实现跳转浏览器新的标签页 let newpage = this....localStorage除非人为手动清除,否则会一直存在浏览器中,但可能某些情况下我们可能需要localStorage有一个过期时间,那该怎么实现?

    3.8K20

    捕获用户在该页面停留的时长,我是这样做的(前端监测)

    页面显示的时候) onpagehide (页面隐藏的时候) 经过自己的一点小测试,发现无论在关闭的时候(也就是点击叉),还是隐藏的时候(也就是点击左右箭头)都会触发 onpagehide;也无论是在首次加载,还是刷新的时候...,都会触发onpageshow,但是刷新的时候会先触发onpagehide,在触发onpageshow。...上面效果图(录得GIF就那AV画质,没钱开VIP,将就看吧,有点AV感觉也好,哈哈),第一次点击的是叉,点击叉那也可以理解为离开了页面,第二次a链接跳转,第三次刷新,刷新也可以理解为一次离开吧,一共存了三条数据...browserHistory 单页面的browserHistory路由是基于H5的History API实现的,我们只要监听popstate就可以知道,点击前进后退按钮改变的url变化,表url发生变化...ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1,否则其他都是走基于History API实现的Hash-router,我测了几个浏览器

    5K41

    同源策略与跨域资源共享

    Access-Control-Max-Age:在预检请求的响应中指定,告知浏览器可以将预检请求的结果缓存多长时间(秒)。在此时间内,对于相同的跨域请求,浏览器无需再次发送预检请求。...嵌入第三方插件/小部件:如社交媒体分享按钮、在线聊天窗口、地图服务等。单点登录(SSO)和身份验证:跨多个域进行用户身份验证和令牌交换(如OAuth)。...否则,即使请求成功到达服务器并返回了数据,浏览器也会阻止JavaScript访问响应,通常会在控制台报CORS错误。...浏览器处理预检响应:浏览器检查预检响应中的CORS头部是否允许即将发送的实际请求。如果允许:浏览器接着发送实际的跨域请求(例如PUT请求或带Authorization头的POST请求)。...#####3.CORS请求总体流程总结浏览器判断请求是否为跨域请求。如果是跨域请求,判断是简单请求还是需要预检。(如果需要预检):发送OPTIONS预检请求->服务器响应预检->浏览器检查预检结果。

    30100

    MobileboneJs与音视频播放坑点解决方案

    情况一:返回按钮为mobilebone提供的返回按钮,这个可以用mobilebone相关api解决,如下: Mobilebone.callback = function(pageinto, pageout...Mobilebone.isBack(pageinto, pageout)){//判断是否是返回页面 if(video){video.remove();//返回时移出视频播放页面避免视频一直播放} } } 情况二:通过点击浏览器的返回按钮来返回页面...,这个需要监听浏览器返回事件,如下: //浏览器返回时移出视频播放页面避免视频一直播放 if(window.history && window.history.pushState){ window.addEventListener...player.html传递新的参数来进入页面,但是也有个问题,通过首页进入子页面player.html下在点击视频列表播放视频没有问题,但直接通过网址进入子页面player.html或在player.html页面下直接刷新在点击下方播放列表视频后

    35530

    AJAX全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上。...异步的JavaScript: 使用 【JavaScript语言】 以及 相关【浏览器提供类库】 的功能向服务端发送请求,当服务端处理完请求之后,【自动执行某个JavaScript的回调函数】。... 刷新...Number readyState 状态值(整数) 详细: 0-未初始化,尚未调用open()方法; 1-启动,调用了open()方法,未调用send()方法;...* 关于“预检” - 请求方式:OPTIONS - “预检”其实做检查,检查如果通过则允许传输数据,检查不通过则不再发送真正想要发送的消息 - 如何“预检” => 如果复杂请求是PUT等请求,

    2.1K30
    领券