我正在学习HTML5历史API。以下是我能够实现的目标。
我有一个页面“a.html”,其中包含所有内容和“b.html”链接。当我点击链接时,除了图像更改外,几乎所有内容都保持不变。所以我做的是编写一个点击处理程序,并避免加载“b.html”[实际上b.html在我的服务器中不存在]。我创建一个XMLHTTPRequest并获取需要替换的内容(放在文件调用“xmlres.html”中,只包含一个img标记)并使用pushstate()更新url。
一切正常。但问题是如果用户试图复制当前网址“appname / b.html”并在另一个网页中打开,则找不到该资源,因为我还没有创建“b.html”。我不想再次创建包含完整内容的b.html,是否有解决此问题的解决方法。
我应该为URL编写任何事件侦听器,还是应该如何继续。任何有关这方面的见解都会有很大帮助。
答案 0 :(得分:2)
我认为你在讨论的是单页应用程序,通常称为SPA。
基本上这个概念的意思是你让我们说index.html
并在里面你有一个每个页面的部分默认隐藏,并通过javascript和面向休息的服务管理和处理每个部分的内容基于用户互动。
通过使用hashtag进行导航,单页应用程序是众所周知的,在提供的小提琴中,这是通过哈希符号完成的。
您可以通过此属性轻松访问哈希值:
console.log(window.location.hash);
这是一个fiddle I made,页面转换功能齐全,给我一些包含历史api功能。
以下是这个小提琴的作用:
/1#sectionname
该部分可用,则会显示该部分,否则会显示您尝试访问的部分不可用,因此会显示未找到的消息。请耐心等待我添加历史记录功能,如果您需要更多详细信息,请与我们联系。
以下是wikipedia page for Single Page Applications以防您想要阅读更多内容。
修改强>
我还制作了blog post about it
希望它有所帮助!
答案 1 :(得分:0)
这是一篇描述您正在经历的现象的文章(在文章的底部): http://www.sitepoint.com/an-overview-and-usage-of-javascript-history-api/
基本上,这归结为具有特殊服务器功能,可以了解直接请求404 URL时要执行的操作。引用的文章展示了如何使用PHP完成此操作。其他应用程序服务器(如Node,Vertx,Servlet规范服务器)都可以让您对URL处理进行特殊访问,从而可以确定404是否会发生,并在404为404时为您提供特殊控制。是历史API的一个特例,没有被讨论过。由于它可能会出现一些其他问题。例如,当使用此技术时,当物理资源和SPA资源不存在时,提供404可能仍然是个好主意。虚拟资源是在SPA代码库中发生历史API / URL路由后将出现的页面。这当然会假设服务器知道SPA中的路由如何工作。