2011-10-11 55 views
0

我有一个FB应用程序使用锚(document.location.hash)在不同元素上设置标签(例如当前TAB#,组#被展示...)。 因此,无论用户何时更改这些元素,我都会更改锚点(location.hash),并将#tag = ... 添加到地址栏中的URL中(并且当用户复制链接并将其发送给其他用户时)他被重定向到特定的视图(在同一页上)。更改地址栏中的锚(location.hash)

当应用程序是独立站点时,它运行良好。 但是,当我把它放在FB应用程序(apps.facebook.com/myapp)下 - 它不会更改地址栏中的URL(但是当我读取document.location.has时,我看到了更改)。我想也许这是因为我的应用程序在IFRAME中。 如果它不能被修复,也许有一个Facebook API改变URL中的哈希部分!

回答

0

这是不可能的,如果它是从不同的域提供改变父框架location对象的部分...您只能将其设置为新值改变整个位置:

window.top.location = 'http://example.com'; 

其实document.location总是指当前文档,而window.location指的是顶级文档,代表用户在浏览器的地址栏中看到的URL。

因此,通常您更改了当前文档的散列,并且如果它是以独立网站用户在地址栏中看到的方式打开的,但是一旦在框架中运行(应用程序画布),用户看不到该页面的URL,但是父框架它位于其他域和跨域策略的主题上。