如何在单页应用程序中使用#-URL
How can I use #-URLs in a single-page application?
这篇文章提出了一个非常有说服力的论点,即由于URL是长寿命的(它们被标记为书签并被传递(,所以它们应该是有意义的,因此使用哈希进行真正的路由(确定页面上显示的数据和/或应用程序的状态(是不合适的。然而,当我试图在我的单页应用程序中真正这样做时,我遇到了一个问题:如何呈现我的链接,以便所有浏览器都可以使用该应用程序?在我看来,有三种选择:
- 所有CCD_ 1都具有CCD_ 2前缀。这在HTML4浏览器中非常有效。在HTML5浏览器中,我可以添加一个Sammy路由,重定向到无哈希版本,这也很好。浏览器在链接未被访问时将其标记为已访问,或者在链接被访问时不将其标记成已访问,可能会出现问题。另一个问题是。。。错误的任何通过右键单击并选择"复制链接URL"来共享链接的人都将发送一个有效但笨拙的URL
- 没有CCD_ 3具有CCD_ 4前缀。据我所知,HTML4浏览器将无法拦截这些链接点击,这意味着每一次点击都会导致页面刷新。尽管该应用程序可能仍然可以运行,但由于我可以在页面加载时使用Sammy路由将无哈希版本重写为哈希版本,因此页面加载将大大降低单页应用程序的性能
- 我动态地确定是否使用
#/
作为前缀。这意味着我的所有链接都必须有动态标记,这会使应用程序变得非常复杂
URL的hash
值从未导致页面的整个重新加载。不是在HTML4和之前。哈希值一直是一个内部链接,因此它可以被完美地使用(以twitter为例(。当然,当您刷新页面时,您将重新加载页面。但这是显而易见的。
使用JavaScript,您可以使用window.location.hash
读取此哈希值(另请参阅此问题/答案:如何使用JavaScript检查URL中的#哈希?(
使用更新的浏览器,你还可以检测到哈希变化,如果用户真的改变了URL,这很有用:On-window.location.hash-change?
但是,当你,作为网站,更改你不需要阅读的URL时,你已经知道了,因为你刚刚更改了它。
通过这种方式,使用散列,人们可以交换URL,并且您可以实际读取他们请求的URL,因此它应该可以完美地工作。
相关文章:
- 使用应用程序状态js和视图在angular js url上传递两个参数
- 从使用react路由器的网络应用程序解析物理URL
- 将 MVC 3 应用程序部署到 URL 文件夹已损坏 JavaScript 和内容路径
- 读取Angular应用程序中请求的url
- Facebook JavaScript SDK:读取应用程序URL
- 无法'共享'Firefox操作系统上Facebook和Twitter本地应用程序上的URL
- 在express应用程序中,请求参数两次附加到URL
- Facebook选项卡应用程序动态URL
- 获取包含我的谷歌应用程序脚本的页面的url
- 为什么使用MEAN.js应用程序'URL以#开头
- 如何从struts2应用程序中的AJAX调用url调用servlet
- 是否可以提供一个特定的URL,供任何在网络应用程序中为页面添加书签的人使用
- 有没有任何方法可以在单页应用程序中记录url和哈希片段
- 如何使用chrome文件系统api从chrome应用程序中的url下载图像
- 如何检查“http://”是否包含在 Angular .js 应用程序的 url 输入中
- 如何从MyApp Android打开Web浏览器应用程序的URL
- 如何在我的 AngularJS 应用程序中解码 URL 的部分查询字符串
- 创建AngluarJS应用程序,但没有SEO友好URL的服务器端选项.这会起作用吗?
- 为什么我的公用文件夹没有在我的 NodeJS 应用程序中获取“/”URL 的文件
- 安全的URL/应用程序