2012-04-03 115 views
2

我目前有一个有趣的问题。我使用Facebook PHP SDK对我的网站上的用户进行身份验证。在我最初的请求中,我传入了一个重定向URL,并且所有工作都按预期工作,用户被发送回指定的URL。从重定向JavaScript的URL中删除#

在此页面上,我们将其称为“中间页面”,它们被重定向到我的第二页,我们将其称为“主页”。在这里,你可能会注意到一个有趣的#_=_被追加到URL中。这个问题在这里讨论:Facebook Callback appends '#_=_' to Return URL

我已经在该页面上实现了JavaScript解决方案;但是,仍然存在一个问题。即使奇怪的下划线字符消失,URL的实际散列部分仍然存在。所以,这不是一个大问题,URL现在是./home#

我看了一些方法来解决这个问题:How to remove the hash from window.location with JavaScript without page refresh?

但是,显然这些解决方案需要刷新页面才能工作。显然,这不是最有效和最人性化的方式。

现在,我认为自从我以后,一旦我的用户返回到“中间页面”,将它们再次重定向到我的“主页”,操作的刷新部分可能会以某种方式跳过。但我可能是绝对错误的。

因此,得出结论:有没有一种方法可以在不重新加载我的“中间页面”的情况下删除网址中剩余的散列部分,但在我重定向到“主页”后删除它?

编辑:我通过PHP重定向用户,使用:header('Location: ./home');

+0

您如何从中间页面重定向用户? – Maciej 2012-04-03 01:51:58

+0

对不起,编辑我的问题。 – elliottbolzan 2012-04-03 01:55:11

+0

恕我直言,没有散列的URL调用将始终导致页面的重新加载......这就是散列的用途......您可以清除散列页面上的所有链接,并为此将其除去下一次用户点击一个链接.... – Dominik 2012-04-03 11:01:50

回答

2

这实际上并不是所有使用JavaScript的浏览器都可行,因为我曾试图在过去使用它。但是,您可以使用HTML 5来实现相同的目的,这使用HTML5 History API

function deleteHash(){ 
    // Remove the hash by rewriting URL without it. 
    history.pushState("",document.title,window.location.pathname + window.location.search); 
} 
+0

绝对真棒,谢谢! – elliottbolzan 2012-04-03 17:53:20