在 URL 中放 # 是出于什么考虑?

2015-07-04 20:05:00 +08:00
 kehr

今天发现网页版网易云音乐分享歌单 http://music.163.com/#/share/35255916/90382499
路径里有个#,之前也遇到过类似的情况。网上搜了一圈,都被导向锚点的解释去了,显然不是我想要的答案。

于是我用 Tornado 测试了一下:

class Application(tornado.web.Application):

    def __init__(self):
        """"""
        handlers = [
            (r"/", IndexHandler),
            (r"/#/test", TestHandler),
class TestHandler(BaseHandler):
    def get(self):
        self.write("可以访问!")

Server 地址是: http://localhost:8090

结果如下:
1. 访问 http://localhost:8090/#/test 返回的是首页
2. 修改代码

class Application(tornado.web.Application):

    def __init__(self):
        """"""
        handlers = [
            (r"/", IndexHandler),
            (r"/test", TestHandler),

访问 http://localhost:8090/test,确认服务正常,可以返回预期页面。

那么很显然了:# 放在 URL 中虽然看起来像是一级路径,但还是起到锚点的作用。浏览器会自动把 # 及其以后的整体部分识别为锚点(猜测)。

随之问题来了:

为什么现在开发要用采用这种方案呢?是考虑抓取问题么?

这个问题困扰我一段时间了,公司内部也有两个平台是这么做的(显然和抓取没毛线关系)。问了一圈貌似也没人知道。

求指导 ಥ_ಥ

5772 次点击
所在节点    问与答
21 条回复
dallaslu
2015-07-04 23:53:53 +08:00
如果把网易云音乐的网址中的 # 去掉,是可以访问的,不过会被重新定位到带 # 的链接上。可以访问的页面是单个歌曲的信息,带 # 号的页面是一个播放器框架,使用 iframe 引用了单曲页。

一个播放器,是典型的单页应用,所以用这种方案会有楼上所说的各种好处。

有人提到 history api,可以先去了解一下 PJAX。进一步可以了解一下类似 twitter 中在 url 里加入 !# 的原因。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/203337

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX