【问题标题】:Facebook Changes Page URL but does not actually change pageFacebook 更改页面 URL 但实际上并未更改页面
【发布时间】:2011-04-27 02:11:21
【问题描述】:

我在 Facebook 上发现,当我更改页面时,页面地址会更改,但页面不会重定向,而是通过 ajax 加载。

您可以知道,因为单击链接时控制台不清除但 URL 会更改。

很奇怪,但有人知道它是怎么做到的吗?

【问题讨论】:

  • 你准确地一针见血。他们使用 javascript 基于异步回调来操作 DOM。然后,您也可以使用 window 对象从 javascript 更新窗口位置(地址栏)。
  • 您的问题已包含在The Facebook footer bar is an iframe, so why it doesn't it reload with the rest of the page? 中 - 我已尝试在那里提供一些其他信息。
  • 是的,这可以解释一些事情,但是它将 URL 更改为哈希,而现在他们更改了 URL! :O 太棒了 XD
  • @ITg:仔细看——如果页面没有重新加载,那么某处有一个哈希......
  • @ITg:查看实际加载的 URL,而不是当您将鼠标悬停在链接上时出现的 URL。 Facebook 在这点上很巧妙:许多区域由两个 URL 访问:一个带有正常路径,一个带有片段。通过 AJAX 加载时使用片段版本来避免整个页面重新加载,并且 - 这是诀窍 - 如果您在该 URL 上强制重新加载,生成的页面将在客户端将您重定向到路径版本。如果您真的想看看发生了什么,请安装 Live HTTP Headers 插件,或使用 Fiddler。

标签: javascript http facebook


【解决方案1】:

Facebook 通过大量 AJAX 调用运行,这些调用会改变页面状态和部分。 因此,要通过复制 URL 地址使页面可链接到某人,每次您调用 AJAX 相关函数时,他们都会使用假锚“#!”更新 URL。加上真实地址。 只需在您加载真实页面(使用 F5 或链接该页面)时,JS 解析器就会在 #! 之后捕获字符串。 (如果有)并将您重定向到 baseaddress + that。

我相信这样的事情(未经测试):

var urlstr = new String(location.href);
var urlparm = urlstr.split('#!');
var last = urlparm.length - 1;

if( (urlparm[last] != urlparm[0]) && (urlparm[last] != "/") )
{  var redir = "http://www.facebook.com" + urlparm[last];
   location.href = redir;
}

在谷歌浏览器中,URL 确实发生了变化,我认为某处有一个哈希,但我不知道在哪里以及如何。

【讨论】:

  • 如果 Chrome 正在这样做,那么它们就破坏了预期的功能
  • 是的,谷歌现在统治了网络:P
猜你喜欢
  • 1970-01-01
  • 2021-08-10
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多