直至正文
豫言包府
← 众包

豫言操作系统网页导航 0.1.0

豫言 · 库

前往或替换当前网址、重载页面,并在同源内压入或替换历史记录。

网页导航之约 0.1.0

此包令浏览器中豫言之客改当前页之址与历史:离此而往他处、易当前之址、重载,及不离本页而压入或替换历史(以地址栏之查询参数记“开某项目、某版本”之类态)。回退与前进所生之 popstate、hashchange,不在此包,以[网页事件之约](../网页事件/规范.文言.md)订“窗口”得之(类曰历史)。读当前网址全文,用网页文树包之读取页面网址;解与改网址,用网址定位、网址查询二包。客依此包,诸术皆当具。

址之律

诸术之“址”参数,皆依当前页之网址而解(可为绝对网址,亦可为 /路径、?查询、#锚 等相对之引),且当合:

  • 长至多八千一百九十二 UTF-16 码元,不得为空,不得含 ASCII 控制字符(零至三十一、一百二十七)与反斜杠;
  • 解后之协议惟 http: 或 https:(javascript:、data:、blob:、file: 等一概拒之)。

违约则发豫言事故(中文辞,可捕)。

诸术

前往网址:字符串,返有

等于 location.assign(址):于历史留一条而往新址(可他来源)。页随即卸,此调之后客之代码不保证行;欲于离前所为(存稿之类)当先于调用完成。

替换当前网址:字符串,返有

等于 location.replace(址):以新址易当前历史项,退不复至旧址(登录跳转常用)。页随即卸。

重载页面:有,返有

等于 location.reload()。页随即卸。

压入历史:字符串,返有;替换历史:字符串,返有

等于 history.pushState(null, '', 址) 与 history.replaceState(null, '', 址):惟改地址栏与历史,不重载、不触发 popstate,状态物恒为 null。址解后须与当前页同源,否则发事故(浏览器亦拒之)。常法:择一项目则压入历史(“/cloud/?project=…”),筛选变则替换历史。

移动历史:整数,返有

等于 history.go(n):负则后退,正则前进;零无效(重载用重载页面),绝对值至多五十。移动异步而成,浏览器随后触发 popstate(同文档内)或径卸其页(离本文档时)。

与他包之配

  • 读当前址:网页文树包之读取页面网址、读取页面查询参数。
  • 拼带查询之址:网址查询包与网址包。
  • 回退与前进:网页事件包订阅界面事件(“窗口”,“popstate”,“{}”),事类曰历史,详情 {"网址":当前址,"状态":null}。客既收,自决重读址而更界面,或重载页面。

限额与败

| 项 | 限 | | --- | --- | | 址长 | 至多八千一百九十二 UTF-16 码元 | | 移动历史 | 一至五十,或负五十至负一 |

违约之调用(址不合、压入或替换非同源、步数越界)发事故;浏览器因页正卸或历史操作过繁而拒之,亦发事故。宿主已闭则发事故。

一致性之例

  1. 当前页 https://例.站/cloud/?service=code:压入历史(“/cloud/?project=甲”)后读取页面网址为 https://例.站/cloud/?project=甲,popstate 不发;移动历史(负一)后归原址,并收一类曰历史、名曰 popstate 之事。
  2. 压入历史(“https://别处.站/”):发事故(非同源)。
  3. 前往网址(“javascript:alert(1)”)、前往网址(“data:text/html,x”):发事故。
  4. 前往网址(“?panel=终端”)解为当前路径加新查询而往。
  5. 替换历史(“#锚”)后址带 #锚,历史条数不变。

界

此包不定:历史状态物(恒 null)、window.open(新窗与弹窗)、beforeunload 之问、Navigation API、单页路由库、下载与链接之点击(用 a[href] 与界面事件)。

所赖

观包之制

上传之记

今修订:1 ·

  1. 修订 1
    取 ZIP

包之层级

父:豫言操作系统接口

无子包。