我正在编写facebook内的“单页”应用程序(使用canvas app方法)。当用户在应用程序内移动时,我正在更改位置,如:apps.facebook.com/my-app#current_location并通过AJAX加载内容。
不幸的是,当有人在浏览器中加载http://apps.facebook.com/my-app#current_location时,画布应用程序看不到网址片段#currrent_page。
我如何解决这个限制?
答案 0 :(得分:1)
虽然我无法正确回答你的问题,(而且我认为它已经有点老了),下面的信息可以帮助其他人更好地理解这些#(哈希)的事情。 它们被称为 URL片段。
http://blog.httpwatch.com/2011/03/01/6-things-you-should-know-about-fragment-urls/
任何包含#字符的URL都是片段URL。部分 #左侧的URL标识可以的资源 由浏览器和右边的部分下载,称为 片段标识符,指定资源中的位置:
![]()
片段未在HTTP请求消息中发送
如果您尝试在像HttpWatch这样的HTTP嗅探器中使用片段URL, 你永远不会在请求的URL或Referer中看到片段ID 头。原因是片段标识符仅由 浏览器 - 它不会影响从哪个资源返回 server.Here是HttpWatch的屏幕截图,显示了生成的流量 通过刷新片段URL:
![]()
答案 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,然后在您的网站中找到正确的内容。