Facebook回调附加'#
Facebook回调已开始将#_=_
哈希下划线附加到返回URL
有谁知道为什么? 解决办法是什么?
通过Facebook的平台更新:
会话重定向行为的改变
本周,当这个字段留空时,我们开始向redirect_uri添加一个片段#____ = ____。 请确保您的应用可以处理这种行为。
为了防止这种情况,请在您的登录url请求中设置redirect_uri,如下所示:(使用Facebook php-sdk)
$facebook->getLoginUrl(array('redirect_uri' => $_SERVER['SCRIPT_URI'],'scope' => 'user_about_me'));
UPDATE
以上内容正如文件中所说的解决此问题一样。 但是,Facebook记录的解决方案不起作用。 请考虑在Facebook平台更新博客文章留言,并按照此错误获得更好的答案。 在此之前,将以下内容添加到您的head标签中以解决此问题:
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
window.location.hash = '';
}
</script>
或者更详细的选择(谢谢niftylettuce):
<script type="text/javascript">
if (window.location.hash && window.location.hash == '#_=_') {
if (window.history && history.pushState) {
window.history.pushState("", document.title, window.location.pathname);
} else {
// Prevent scrolling by storing the page's current scroll offset
var scroll = {
top: document.body.scrollTop,
left: document.body.scrollLeft
};
window.location.hash = '';
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scroll.top;
document.body.scrollLeft = scroll.left;
}
}
</script>
TL; DR
if (window.location.hash == '#_=_'){
history.replaceState
? history.replaceState(null, null, window.location.href.split('#')[0])
: window.location.hash = '';
}
完整版与分步说明
// Test for the ugliness.
if (window.location.hash == '#_=_'){
// Check if the browser supports history.replaceState.
if (history.replaceState) {
// Keep the exact URL up to the hash.
var cleanHref = window.location.href.split('#')[0];
// Replace the URL in the address bar without messing with the back button.
history.replaceState(null, null, cleanHref);
} else {
// Well, you're on an old browser, we can get rid of the _=_ but not the #.
window.location.hash = '';
}
}
一步步:
fragment
是#_=_
我们只会进入代码块。 #
清理URL并只取第一部分。 history
用干净的URL替换当前页面状态。 这会修改当前的历史记录,而不是创建新的历史记录。 这意味着后退和前进按钮将以您想要的方式工作。 ;-) #_-_
。 了解关于history.replaceState
更多信息。
了解更多关于window.location
。
如果你想从网址中删除剩余的“#”
$(window).on('load', function(e){
if (window.location.hash == '#_=_') {
window.location.hash = ''; // for older browsers, leaves a # behind
history.pushState('', document.title, window.location.pathname); // nice and clean
e.preventDefault(); // no page reload
}
})
链接地址: http://www.djcxy.com/p/70351.html
上一篇: Facebook Callback appends '#
下一篇: How does Facebook Sharer select Images and other metadata when sharing my URL?