0

你们有些人可能知道,Google 现在正在抓取 AJAX。到目前为止,该实现很优雅,但至少它仍然适用于 Yahoo 和 Bing AFAIK。

背景:我的网站由 Wordpress 和 HTML5 驱动。自定义帖子类型具有内容树类型,这些内容由 AJAX 驱动。在完全理解如何实现它们之前,我不使用 hashbangs (#!) 的解决方案是相当“有风险的”。每个链接作为 HREF 链接到 *site.com/article-one/?tab=first_tab*,显示所选选项卡 ( <div>Content...</div>) 的内容。像这样:

<a href="http://site.com/article-one/?tab=first_tab" data-tab="first_tab">This First Tab</a>

您可能会注意到,data-tab 是 JavaScript 通过 AJAX Get 发送的值,它获取相关内容并在容器内呈现。另一方面,服务器获取变量并执行 a<?php get_template_part('tab-first-tab'); ?>来传递内容。

关于风险,好吧,我可以看到谷歌和其他搜索引擎将获取 *http://site.com/article-one/?tab=first_tab* 而不是http://site.com/article-one/,使用户访问该 URL,而不是显示带有自动选择的选项卡内容的主页。

现在的问题是避免这种情况的实施。

Hashbang:根据我所学到的,我应该这样做。

  1. HREF 应该成为site.com/article-one/#!first-tab
  2. JS 应该提取 href 的“first-tab”并将其传递给 $_GET(只是为了不使用“data-tab”)。
  3. JS 应该将 URL 更改为site.com/article-one/#!first-tab
  4. JS 应该检测 URL 是否有#!first-tab,并显示选定的选项卡而不是默认选项卡。

现在,对于服务器端的实现,我有点迷失在树林里。

  1. Wordpress 将如何处理site.com/article-one/?_escaped_fragment_=first-tab
  2. 我是否必须更改 .htaccess 中的某些内容?
  3. HTML 快照应该有什么?我的猜测是所有站点,但显示了请求的选项卡,而不是仅显示内容。

我认为我可以将 Wordpress 检测到 _escaped_fragment_ 时将处理的内容分开。如果被请求,就像谷歌一样,它将显示所有内容以及所选内容,如果不是,那是因为 AJAX 正在请求它并且只会显示内容。那应该是对的?

4

1 回答 1

2

我要说第三人称了。

既然这没有回应,我有一个很好的理由,为什么你不应该这样做。是的,这与 Twitter 抨击他们的原因相同:

http://danwebb.net/2011/5/28/it-is-about-the-hashbangs

您应该制作普通的 URI,而不是做 hashbangs。例如,带有摘要选项卡的文章应该是“site.com/article/summary”,如果它是弹出的默认文章(或者它已经被请求),它也应该使用 pushState() 更改为该 URI。

如果用户选择“练习”选项卡,则 URL 应使用 pushState() 更改为“site.com/article/exercises”,同时站点通过 AJAX 加载内容,而您仍保持原来的 href 为“site.com /文章/练习”。如果没有 JavaScript,用户仍然应该看到内容 - 不仅是内容,还有选中选项卡的整个页面。

为此,应该对 .htaccess 进行一些编辑以处理 URL 中的 /[tab]。

于 2012-06-28T22:49:21.603 回答