这年头使用DeepLink的网站越来越多了,像Flash整的网站,本身在一个页面里,DeepLink是必须的,国外的Flash基本都有这个功能,不过。。。国内这样的网站就差多了,基本不加,无法根据URL导航到特定的内容页,相当得不好用呢。

而现在Ajax之后,Html5也进入实际的使用了,这样的网站很多也不再没事就刷新页面,白一下屏,多不爽,也都是使用DeepLink了。但是这样的网站想使用Facebook Like Button这样的按钮时,有些个麻烦了。

Facebook Like Button 的代码是这样子的:

这里的data-href就是Like的网站地址,Facebook会到这个页面去查找相应的og:title, og:description等等的值,然后将这个显示出来。但是,用DeepLink的网站因为页面没有刷新,因此,og:title这样的值是不会改变的,即使是用js改变它,也是没用的,Facebook不认识js.

我想到的一个解决办法是:

  1. 修改这个script代码,原因是我想用js修改data-href的值。如果不改这个js,似乎这个js代码不会重复执行,即使改了data-href的值也不会有什么变化。大致上是移除这里的 script代码,用类似下面的代码代替, 并且在修改完data-href值后执行这个函数。
  1. 在每次地址的锚点部分改变后,改变data-href的值。比如http://www.chrislearn.im/#/level0/这个地址时,把data-href的值改成:http://www.chrislearn.im/?path=level0&title=demo&description=des.并且重新调用createFacebookSdk方法,重新生成like button按钮。

  2. 下面就是服务器端了,服务器端页面可以根据查询字符串来修改og:title这样的值。因为服务器端修改的,因此Facebook可以取到这些个值。但是我们的网页其实是根据#/level0/部分来显示内容的,我并不想再整一个解析查询字符串的js函数,所以,可以在服务器端可以向页面写入一个location=”http://www.chrislearn.im/#/level0/“的javascript的脚本块,让页面转向。下面是我一个项目里的一小段服务器端代码:

OK了,大功告成。还有一点,Facebook的like button最后是以iframe来呈现,这样一个额外的好处是,容易浮到flash,silverlight上面。