想象一下以下情况:
用户转到https://mywebsite.com
,搜索内容并点击[submit]
。显示结果,URL现在为https://mywebsite.com/floobah?q=burp
。用户单击一个锚点,该锚点将页面向下滚动到div,从而选择了一种可视化结果的方式。该URL现在为https://mywebsite.com/floobah?q=burp#viz
。用户选择饼图小部件并显示饼图和相关数据。该URL现在为https://mywebsite.com/floobah?q=burp&chart=pie&sort=asc#viz
。
然后用户将URL发送给朋友。当其收件人打开该URL时,状态将与发件人完全相同。换句话说,将解析URL,并执行恢复状态的操作……执行查询,页面向下滚动到 viz 部分,打开饼图,并显示已排序的相关数据根据要求。
我现在正在通过解析URL并重播所有步骤来执行此操作。但是肯定必须已经有一个图书馆可以这样做,不是吗?总而言之,我希望URL中编码的页面状态可以被URL书签的接收者共享然后重新创建。
更新1:如上所述,我的网址存在一个问题https://mywebsite.com/floobah?q=burp&chart=pie&sort=asc#viz
:无法区分诸如q=burb
之类的真实查询参数与单击带有附加给let的事件侦听器的元素的结果,例如chart=pie&soft=asc
。我需要能够区分用于处理事件的命令以及查询字符串和哈希(#viz
)
更新2:因此,我有三组参数:在服务器上处理的queryString,在客户端处理的事件以及在哈希表中指定锚点的哈希片段。浏览器滚动到的页面。如果我用!
标记事件怎么办?想象https://mywebsite.com/floobah?q=burp!makePieChart!sortAscending#viz
。服务器将处理queryString q=burp
并返回给客户端,客户端向下滚动到#viz
,并向makePieChart
和sortAscending
触发事件。有想法吗?