2010-10-18 51 views
5

我在我正在使用的网站的主要部分上有四个页面,并使用制表符在它们之间切换。我希望4个选项卡之间的切换是淡入淡出的转换(使用jQuery)。这一切都很好,而且我也希望SEO把每个视为一个单独的页面。我也希望能够链接到一个URL并为它提供正确的内容,尽管它在技术上是相同的页面。处理制表符内容的哈希标记的系统? (!#)

Facebook会执行此操作(facebook.com/#!/another-string-here),并且您可以在图片等之间进行切换,因此它可以充当javascript查询字符串。

这允许立即切换,链接到它的能力,然而每个都可以作为它自己的页面。

有没有推荐的方法来做到这一点?


UPDATE我发现最好的是SammyJS - 还没有实现,但它看起来是最好的答案: http://sammyjs.org/

+0

有趣的问题。 – 2010-10-18 22:15:14

回答

1

假设你有一个基本页面,叫services,并且该页面有两个标签: designdevelopment(仅为了简化)。因此,如果您的域名为example.com,那么点击“设计”标签后,您的哈希URL将看起来像http://example.com/services#!/design,而且开发类似。我假设你知道如何做到这一点。

为了让搜索引擎识别标签,你所做的是制作每个页面的静态版本。所以你有一个http://example.com/services/design和一个http://example.com/services/development。每个选项卡的href属性实际上会指向这些静态页面,但是您需要为每个选项卡附加一个onclick处理程序,以使其进入散列版本。

这种方式,支持JavaScript的客户会得到你的页面的Ajaxy版本与哈希标签和衰落的影响,而没有JavaScript客户端启用(包括网络爬虫)将看到正常的,静态链接,和每个人都是赢家。


根据记录,这是类似于Facebook的一样。他们更进一步,并在支持它的浏览器中使用HTML5的新功能history.pushState(),以完全消除对哈希标签的需求。 (有关更多信息,请参阅this question)。

+0

这个问题的链接的荣誉,它有链接谷歌如何阅读ajax内容的哈希标签,以及如何使它的一切工作。 – 2010-10-19 04:31:17

0

好于两者兼得是不可能的(Facebook的方法和搜索引擎优化),因为服务器没有发送哈希标签,并且大多数搜索引擎(谷歌等)不运行JavaScript。

现在,如果你只是想淡化效果,你可以将它设置,以便在出现在URL中的散列标签,例如#fade,jQuery将不透明度设置为0,等待加载和褪色。为了在淡出功能中,您可以在该功能中的链接e.preventDefault()return false上设置事件侦听器,并淡出不透明度。一旦完成褪色你将不得不JavaScript的变化location.href="site"一个新的页面与哈希#fade

编辑:例如:http://fiddle.jshell.net/msm595/u5Eg2/3/show/light/

+1

这不是不可能的。您可以同时允许散列网址和正常网址(例如example.com/somepage AND example.com/#!/somepage)。这样,支持JavaScript的客户端就可以获得淡入淡出的Ajaxy版本,而没有启用JavaScript的抓取工具和客户端仍然可以访问这些页面。 – 2010-10-18 22:36:59

+0

true,true。这可以工作 – Alex 2010-10-18 22:50:47