0

我已经看到了一些在其他平台上执行此操作的技术,但想知道是否有人有干净的方法来执行此操作。

我的应用程序有一个主机 HTML 文件,并使用标准 MVP/Places/Activity 来解析哈希片段。它为不同的元素显示各种类似的按钮。FB(使用 lint 工具确认)只会读取主机页面的静态 HTML,所以我需要在它返回给请求者之前对其进行操作(在 GWT 中解决这个问题是没有意义的)。

我使用 Guice-y com.google.inject.servlet.ServletModule 所以我可以创建类似的东西:

serve("/fb/*").with(MetaTagAdder.class);

我可以使用 /fb/* 作为 Like 按钮的 URL。因此,吐出托管页面的 HTML(根据需要添加动态元标记)。然后 *.nocache.js 文件直接跳转到 EntryPoint.OnModuleLoad()。

这似乎有点笨拙。有人有更好的主意吗?

4

1 回答 1

0

所以我最终走了这条路,它工作正常。创建一个 servlet,其 doPost/doGet 方法会写出您的主机 html 并将参数传递给它。所以网址看起来像:

http://example.com/fb/mypage.html?foo=baz#place:foo=baz

然后你有可用的参数来创建元标记等等:

// the first chunk of the static html
resp.getWriter().println("<html><head><script type=\"text/javascript\" language=\"javascript\" src=\"/myMoodule/myModule.nocache.js\"></script>");

// the dynamic meta tags
resp.getWriter().println("<meta property=\"og:title\" content=\"" + req.getParameter("foo") + "\" />");

// the rest of the static html
resp.getWriter().println("</head><body></body></html>");

然后,当您在类似 fb 的 div 上设置 data-href 属性时,请使用上面的 url。也适用于 SEO。生产系统的注意事项:

  • 站点中的导航元素应将用户带回直接托管的版本。这可能很棘手。了解您将使 HTTP 请求中的查询字符串保持静态,而哈希片段会演变以对用户做出反应。
  • 如果您的参数范围有限并且对参数进行处理,请使用 HttpServlet 中的 memcache 来缓存返回给客户端的 html 的半静态副本。
  • 不要把东西放在身体里,试图让你的 SEO 变得时髦。心痛就在那个方向。

我仍然在调整这个,但在这一点上看不到任何掉线的表演塞子。

于 2013-08-26T00:45:49.530 回答