“Redirect” page without refresh (Facebook photos style)
我正在尝试实现内容浏览,就像用户浏览照片时在Facebook上所做的一样。我想每个人都熟悉该照片浏览,您可以单击"下一个"和"上一个"并立即获取下一张或上一张照片(也可以使用箭头键进行导航)。
例如,当您单击"下一步"时,您会注意到页面没有刷新-仅刷新内容。最初,我认为使用纯ajax调用完成此操作,这种调用仅刷新"内容",在这种情况下为图像,描述和注释。但是后来我发现浏览器的"位置"工具栏中的URL也被更改了!
我尝试使用Firebug进行检查,发现当您单击"下一步"时,仅下载了下一张照片,而我仍然不知道评论来自何处
- 为此,History.js提供了相同的HTML5 API,同时优雅地降级了所有不支持它的浏览器(包括对数据和标题的支持以及replaceState功能)。使用它意味着您不必为IE9更改而更改代码。
我尝试通过facebook图像进行更改,这就是我看到的内容:
在Firefox中:
页面URL不变。只有哈希在变化。这是一种允许爬网程序为内容编制索引的技术。这是什么情况:
-
用户点击"下一步"
-
JS使用标签,注释等加载下一张图像,并用它们替换旧内容。
-
JS更改哈希值以对应新图像
网址看起来像这样:
http://www.facebook.com/home.php?#!/photo.php?fbid=1550005942528966&set=a.1514725882151300.28042.100000570788121&pid=3829033&id=1000001570788121(注意哈希值)
对于第二个问题,这只是上述技术的一个好处。当您在Facebook上时,实际上很少刷新页面。仅更改哈希值,以便您可以将链接发送给其他人,并且爬网程序可以为内容编制索引。
在Google Chrome浏览器中:
似乎chrome可以通过某种方式更改网址而无需刷新页面 s>。它通过使用window.history.pushState来实现。在这里阅读。
URL看起来像这样:http://www.facebook.com/photo.php?fbid=1613802157224343&set=a.1514725288215100.28042.1000005707388121&pid=426541&id=1000001570788121(注意这里没有哈希,但是URL随图像一起变化)
顿悟中:
当图像更改时,主显节不会更改URL。
URL看起来像这样:http://www.facebook.com/photo.php?fbid=1441817122377521&set=a.1514725882215100.28042.1000005707848121&pid=3251944&id=1000200570788121(没有哈希,并且更改图像时URL保持不变)
(目前没有其他浏览器可以验证)
- 同意谢谢您的解释,我将添加有关pushState的代码。
-
也许您回答这个问题的时间是他们使用哈希更改来加载新图像,但是现在当您单击下一步按钮时,URL本身会更改,但不会刷新。甚至当您单击首页URL中的热门新闻时,URL也会更改,但页面不会刷新。我真的很好奇它是如何工作的。
-
@UberGeek AFAIK firefox(我假设您在谈论它)在新版本中支持window.history.pushState
此处未提及的一种技术是他们可能使用过的window.onhashchange()方法(在ie8和其他大多数语言中受支持)。
-
我相信这就是发生的事情,而不是相反的情况。下一个和上一个链接只是更改哈希值,JavaScript代码会做出反应并加载相关照片。
您可能会注意到页面URL保持不变。但是,更改的是页面哈希(网址中#后面的部分)。
您需要这样的内容:http://code.google.com/p/reallysimplehistory/
-
那是不对的。图片网址在Chrome网址栏中显示为http://www.facebook.com/photo.php?fbid=135122293393816&set=t??.1575828580&pid=8182??864&id=15752828580,并且其中没有#。
-
@Gabi:Chrome支持window.history.pushState,因此在Chrome中可以更改URL栏而无需强制重新加载。在其他浏览器(Firefox,IE)中,URL栏仅可通过window.location.hash方法进行可变,该方法从URL末尾的哈希标记之后追加更改数据(或检索更改数据)。