无需刷新的“重定向”页面(Facebook 照片风格)

2024-05-26

我正在尝试实现内容浏览,就像用户在 Facebook 上浏览照片时一样。我想每个人都熟悉照片浏览,您可以单击“下一张”和“上一张”并立即获取下一张或上一张照片(您也可以使用箭头键导航)。

例如,当您单击“下一步”时,您会注意到页面没有刷新 - 仅刷新内容。起初我认为这是使用普通的 ajax 调用来完成的,该调用仅刷新“内容”,在本例中是图像、描述和评论。但后来我注意到浏览器“位置”工具栏中的 URL 也发生了变化! 我尝试使用 Firebug 检查这一点,发现当您单击“下一步”时,只会下载下一张照片,而且我仍然不知道从哪里加载评论和图像元数据(描述、时间、标签等) 。

有人可以解释一下这种技术是如何完成的吗 - 页面 URL 更改而无需页面刷新(或者如果从缓存刷新,甚至没有页面“闪烁”)。 我知道如何使用 ajax 更改页面内容,但该页面的 URL 始终保持不变。如果我单击“刷新”按钮,我会再次看到第一页。但在 Facebook 上则不然,因为即使是“window.location”每次都会更改,而无需实际重定向。

我注意到的另一件事是底部工具栏(应用程序、聊天等)“始终位于顶部”。即使您更改页面,此工具栏也不会刷新并始终保持在顶部 - 它甚至不会像其他刷新的页面(无论是从网络服务器还是从本地缓存)一样“闪烁”。我想这与上面的技术相同 - 某种“假”重定向或其他什么?

答案是pushState

if (window.history.pushState)
    window.history.pushState([object or string], [title], [new link]);

你会微笑:)


我尝试通过 Facebook 图片进行更改,这就是我所看到的:

在火狐中:

页面 URL 没有变化。只有哈希值正在改变。这是一种允许爬虫对内容建立索引的技术 http://code.google.com/web/ajaxcrawling/docs/getting-started.html。发生的事情是这样的:

  • 用户点击“下一步”
  • JS 加载带有标签、注释等的下一张图像,并用它们替换旧内容。
  • JS 更改哈希值以对应新图像

网址如下所示:http://www.facebook.com/home.php?#!/photo.php?fbid=1550005942528966&set=a.1514725882151300.28042.100000570788121&pid=3829033&id=1000001570788121(注意哈希值)

至于第二个问题,这只是上述技术的一个好处。当您使用 Facebook 时,页面很少会真正刷新。仅更改哈希值,以便您可以向其他人发送链接,并且爬虫可以对内容建立索引。

在谷歌浏览器中:

It seems that chrome hassome way to change urls without refreshing the page. It does that by using window.history.pushState. Read about it here http://www.spoiledmilk.dk/blog/?p=1922.

网址如下所示:http://www.facebook.com/photo.php?fbid=1613802157224343&set=a.1514725288215100.28042.1000005707388121&pid=426541&id=1000001570788121(请注意,这里没有哈希,但 url 仍然随着图像一起变化)

In Epiphany http://projects.gnome.org/epiphany/:

当图像更改时,Epiphany 不会更改 URL。

网址如下所示:http://www.facebook.com/photo.php?fbid=1441817122377521&set=a.1514725882215100.28042.1000005707848121&pid=3251944&id=1000200570788121(没有哈希,并且更改图像时 URL 保持不变)

(目前没有其他浏览器可供验证)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无需刷新的“重定向”页面(Facebook 照片风格) 的相关文章

  • 仅在图像加载后应用 jQuery 瀑布“回流”

    我正在使用 jQuery 瀑布来显示网格样式 为了阻止常见的图像重叠问题 我将瀑布方法包装在 load 函数中 例如 window load function buildcontainer waterfall colMinWidth 260
  • 在浏览器中刷新页面而不重新提交表单

    我是一名 ASP NET 开发人员 我通常会发现自己正在浏览器中打开正在处理的网页 Chrome 是我选择的浏览器 但这个问题与任何浏览器都相关 我的工作流程通常是这样的 编写代码 在 Visual Studio 中重建项目 然后使用 Al
  • 如何在不进行列表搜索的情况下知道是否喜欢该帖子

    我尝试使用 fql 查询来获取 json 响应 我使用此代码来执行此操作 String postid jsonObject getString id String query SELECT likes user likes FROM str
  • 为什么我收到此错误:“未捕获类型错误:无法读取未定义的属性“标题””?

    我正在尝试写一个ajax网络应用程序 我有一个函数应该请求一个json对象 然后使用它来重新 填充网站 这里是JavaScript有问题 第 8 16 行 window onload LoadData Home var doc functi
  • 尝试在 Facebook 中注册成就时出现 OAuthException 2500(未知路径组件)

    我正在尝试为应用程序注册 Facebook 开放图谱成就 我获取应用程序访问令牌并使用开放图 API 资源管理器发布以下请求 请注意 上面的应用程序 ID 和访问令牌不是真实的 但是 我得到以下答复 error message Unknow
  • 如何将值传递到 selectOneMenu 中的监听器

    我有 2 个下拉菜单 类型和代码 如果值 A 或 B 或 C 我希望代码下拉列表根据类型下拉列表更改值 如何将 A 或 B 或 C 的值传递给侦听器 以便它可以理解和处理我的 List
  • MVC:如何使用ajax?

    我将使用 Zend Framework MVC 实现启动一个项目 我如何使用ajax 我的意思是 我应该将所有 ajax 代码放入控制器中吗 还是进入视野 例如 我想将作者 ivan 的帖子显示在页面上 通常 我创建一个指向 posts a
  • 如何在phonegap应用程序中使用存储在localStorage中的json feed?

    这就是我正在做的 向我的网络服务器发出请求 响应采用 json 格式 使用 jquery 模板在我的应用程序中呈现回调数据 非常简单 就像魅力一样 问题是 我想在本地存储一些数据 这样我的应用程序就不必每次都从服务器获取它 3g 很慢 每笔
  • Facebook 好友请求 - 失踪好友

    我请求从我正在开发的 Android 应用程序中获取用户好友 从 Facebook Api V2 0 开始 我知道我应该只获取已经通过我的应用程序登录的用户好友 但是 尽管我知道用户的某些朋友已通过我的应用程序登录 但在请求该用户的朋友时
  • 更改javascript nodejs中所有页面的href url

    我已经实现了具有多种语言下拉菜单的引导导航栏 当我选择语言时 它将翻译页面 如何更改其他页面的 url 和按钮文本 当我选择french 将所有网址更改为 fr about and fr contact 如何使用 JavaScript 进行
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • Apache 从子域重写为 www 但保留所有永久链接

    我已经研究了大约 2 个小时 虽然大多数主题都很相似 但没有一个解释如何做我想做的事情 我正在将一个结构为 blog domain com 的博客移至 www domain com blog 当我重定向时 我需要保留博客文章的永久链接 所以
  • Django:管理中的 AJAX ManyToManyField

    我要显示ManyToManyFields 在 admin 中就像filter horizontal确实如此 但会在用户在过滤器字段中键入内容时填充选项 有很多选项 一次性加载它们需要很多时间 I found django ajax 过滤字段
  • 创建动态多维对象/数组

    我正在尝试使用 JS 创建一个多维数组 以便我可以通过 Ajax 调用 PHP 来发布一些数据 这可能很简单 但我对 JS 的了解很少关于这个具体的事情 这是带有代码的 JSFiddle http jsfiddle net k5Q3p 我想
  • ios 用户如何取消 Facebook 登录?

    当用户到达此屏幕时 无法取消 我能做些什么 为了首先获得这个视图 我正在运行 NSMutableDictionary params NSMutableDictionary dictionaryWithObjectsAndKeys vid l
  • 自动建议 php 的 ajax

    我有一个 html 表单 php 脚本和 jquery 我需要一个 ajax 代码来从我的 php 脚本中进行自动建议 以下是代码 表单 html
  • 从 HTTP 登录到 HTTPS

    我的网站默认使用 HTTP 我确实有一个启用 HTTPS 的证书 但只有其上的某些区域强制建立安全连接 登录是通过 Ajax 处理的 我想开始使用 SSL 即使请求来自 HTTP 我尝试强制请求的地址具有 HTTPS 并且它完美地回复 然而
  • 重定向并保留我的图标

    我想知道当您单击 facebook 上的链接时 facebook 重定向如何保留其 favicon 并使用 FB favicon 打开新选项卡 我想知道如何实现这一点 它不是 iframe 所以我怎么能做这样的事情 我应该从哪里开始 当重定
  • jQuery AJAX 请求在 IE8 中失败,并显示消息“错误:调用 open 方法之前无法调用此方法。”

    我正在使用 jQuery 1 4 2 并尝试执行一个简单的 AJAX 请求 目标 URL 返回一个 JSON 字符串 我使用 jslint 对其进行了验证 该请求在 Firefox 和 Chrome 中有效 但不想在 IE8 中工作 我无法
  • iOS:Facebook 登录访问令牌错误:由于模拟器错误,回退到从 NSUserDefaults 加载访问令牌

    根据说明进行配置后 我不断收到此错误 并且无法在我的应用程序上成功使用 Facebook 登录 我在 XCode 8 1 上运行它并使用 iOS 10 1 模拟器 我按照 Facebook iOS SDK 指南中的步骤操作 并将 Faceb

随机推荐

  • Yegge 的原型模式示例如何处理实例变量?

    我喜欢史蒂夫 耶吉的原型模式示例 http steve yegge blogspot com 2008 10 universal design pattern html并决定快速制作一个概念验证示例 不过 我并没有真正考虑清楚 虽然它非常适
  • asp.net mvc - 如何在 javascript 中循环访问模型数据

    我试图用 javascript 将数据添加到列表框 但是字符串构建语法让我难住了 var yourobject 导致错误 字符文字中的字符太多 全部代码 var mlb cm createListBox mylistbox title My
  • Typescript 参数 - 对象的通用数组和对象键的数组(部分)

    我想要一个接受对象数组和一些对象键数组的方法 该方法将返回对象值数组的数组 但仅返回选定键的数组 data firstName Jane lastName Doe firstName John lastName Doe fields fir
  • C 风格强制转换与内在强制转换

    假设我已经定义了 m256d x我想提取低 128 位 我会做 m128d xlow mm256 castpd256 pd128 x 然而 我最近看到有人这样做 m128d xlow m128d x 是否有用于演员的首选方法 为什么要用第一
  • iOS 11.x 系统颜色

    我读过很多关于如何自定义视图颜色的文章 但没有任何关于检索标准控件 如 iOS 11 x 或以前版本中的导航栏 状态栏和选项卡栏 的系统颜色的文章 UIColor 类有 3 种系统颜色 但它们几乎没有用 例如 调用 UINavigation
  • PowerShell:如何在名称为“*”(星号/星号)的文件/文件夹上创建选择器?

    我需要从 PS 修改注册表 此注册表项与特定文件 所有扩展的文件夹 的上下文菜单相关 HKEY CURRENT USER Software Classes 目前我想将项目添加到此路径 HKCU Software classes shell
  • 解析XML文件以获取所有命名空间信息

    我希望能够从给定的 XML 文件中获取所有名称空间信息 例如 如果输入 XML 文件类似于
  • onKeyDown 和 onKeyLongPress

    我希望我的应用程序对音量按钮的正常按键事件和长按按键事件做出不同的反应 我已经看过了this https stackoverflow com questions 7493531 trying to catch the volume onke
  • Python,socket.error:[Errno 10049]

    在开发一个简单的聊天客户端的基础上 遇到以下错误 socket error Errno 10049 The requested address is not valid in its context 代码是 from socket impo
  • 支持的 Android 设备:0 台设备

    我们是 TourisMap 的开发商 我们不明白为什么在 Google Play 开发者控制台上上传 apk 后 我们支持 0 台设备 我们个人的想法是 Manifest 和 build gradle 都可以 我们可以生成 apk 然后我们
  • INSERT INTO ... SELECT ... 是否始终按序号位置匹配字段?

    我的测试似乎证实了这一点 INSERT INTO a x y SELECT y x FROM b maps b y to a x 即字段仅按顺序位置匹配 而不按名称匹配 情况总是如此吗 即 我可以依赖这种行为吗 很遗憾 文档 http ms
  • 将 wgs 84 转换为纬度/经度

    你好 我在弄清楚如何在坐标类型之间进行转换时遇到了一些麻烦 我有一个坐标集列表 其描述如下 坐标始终采用 WGS84 系统 所有坐标 a 均表示为整数 值 x 和 y 其中坐标值乘以 1 000 000 一个例子 559262 631951
  • 是否有适合 Java 1.4 和 SE (Swing) 应用程序的优秀 DI 框架?

    我正在寻找一个适用于在 JDK 1 4 下运行的 Java SE Swing 应用程序的依赖注入框架 有没有我可以使用的推荐 DI 框架 Guice 和其他基于注释的框架已经退出 我不想搞乱像 Retroweaver 这样的东西 另外 Sp
  • Webworker-threads:在工作线程中使用“require”可以吗?

    使用 Sails js 我正在测试 webworker threads https www npmjs com package webworker threads https www npmjs com package webworker
  • 什么是稀疏体素八叉树?

    我读了很多关于稀疏体素八叉树在未来图形引擎中的潜在用途的文章 但是我一直无法找到有关它们的技术信息 我理解体素是什么 但是我不知道稀疏体素八叉树是什么 或者它们如何比现在使用的多边形技术更有效 有人可以解释或指出我对此的解释吗 这是一个关于
  • 将 pandas DataFrame 写入 unicode 中的 JSON

    我正在尝试将包含 unicode 的 pandas DataFrame 写入 json 但是内置的 to json函数对字符进行转义 我该如何解决 Example import pandas as pd df pd DataFrame a
  • 哪些 2to3 修复程序输出有效的 Python 2 代码?

    2to3 是一个 Python 程序 它读取 Python 2 x 源代码并应用一系列修复程序将其转换为有效的 Python 3 x 代码 考虑一下列出的四十个修复者https docs python org 3 library 2to3
  • jquery中(“*”)有什么用

    我正在阅读 jQuery 我不知道为什么使用 请解释一下这有帮助 是jquery中的一个选择器 它可以无条件地选择所有内容 包括html head和body 这是一个解释其用法的示例 document ready function butt
  • 参数的性能不如硬编码值

    我有一个执行得很糟糕的存储过程 当我声明一个变量时 设置它的值 然后在 where 子句中使用它 该语句需要一个多小时才能运行 当我对 where 子句中的变量进行硬编码时 它的运行时间不到一秒 我开始通过执行计划来查找问题所在 看起来当我
  • 无需刷新的“重定向”页面(Facebook 照片风格)

    我正在尝试实现内容浏览 就像用户在 Facebook 上浏览照片时一样 我想每个人都熟悉照片浏览 您可以单击 下一张 和 上一张 并立即获取下一张或上一张照片 您也可以使用箭头键导航 例如 当您单击 下一步 时 您会注意到页面没有刷新 仅刷