如何从传递到应用程序画布的Facebook应用程序URL获取URL片段(哈希)?

时间:2012-01-19 10:42:50

标签: facebook url canvas hash fragment

我正在编写facebook内的“单页”应用程序(使用canvas app方法)。当用户在应用程序内移动时,我正在更改位置,如:apps.facebook.com/my-app#current_location并通过AJAX加载内容。

不幸的是,当有人在浏览器中加载http://apps.facebook.com/my-app#current_location时,画布应用程序看不到网址片段#currrent_page。

我如何解决这个限制?

3 个答案:

答案 0 :(得分:1)

虽然我无法正确回答你的问题,(而且我认为它已经有点老了),下面的信息可以帮助其他人更好地理解这些#(哈希)的事情。 它们被称为 URL片段

http://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/

  

任何包含#字符的URL都是片段URL。部分   #左侧的URL标识可以的资源   由浏览器和右边的部分下载,称为   片段标识符,指定资源中的位置:

     

layout of a url fragment

     

片段未在HTTP请求消息中发送

     

如果您尝试在像HttpWatch这样的HTTP嗅探器中使用片段URL,   你永远不会在请求的URL或Referer中看到片段ID   头。原因是片段标识符仅由   浏览器 - 它不会影响从哪个资源返回   server.Here是HttpWatch的屏幕截图,显示了生成的流量   通过刷新片段URL:

     

HttpWatch Screenshot

答案 1 :(得分:0)

URL片段仅在客户端(用户的浏览器)上读取,因此Facebook不会也不能在它向您的服务器发出的POST请求中发送它。

您可以做的是捕获所有具有相同路由的URL,无论您选择哪种服务器端语言,以某种方式对它们进行编码,然后将它们发送到客户端以供客户端Javascript读取,然后由客户端Javascript负责用于导航。

示例:用户加载http://apps.facebook.com/my-app/current_location(注意 / 而不是)。您为单页提供服务,您将拥有类似(ERB)的内容:

<script>MyApp.navigate("<%= request.path %>");</script>

您的导航功能可以执行以下操作:

function navigate(path) {
    window.location.href = "#" + path;
}

答案 2 :(得分:0)

是的,Hash网址很适合用于您网站内的导航,但是,在共享网址时效果不太好。解决方案是为每个对象创建规范URL。

因此,当有人可以访问http://yoursite.com/#artists/styx等特定信息时,您还可以让服务器提供http://yoursite.com/artists/styx内容。这样,有人可以共享http://apps.facebook.com/yoursiteapp/artists/styx,然后在您的网站中找到正确的内容。