WordPressでGianismプラグインを使用してFacebookアカウントによるログインを実装したところ、ログイン後に遷移するURLの末尾に 「#_=_」という余分な文字列が付加されてしまう問題の原因と対策

調べてみるとこれはGianismの問題ではなくFacebookの問題であるらしい。

そしてサーバーサイドでこれを回避するのは難しく、クライアントサイド、即ちブラウザ側でJavaScriptを用いて回避するしかないらしい。

回避するには以下のようなJavaScriptを使用する。引用元はコチラ

// Facebook OAuth のバグ回避 リダイレクト後URLに「#_=_」が付加される問題を回避するスクリプト
<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>

WordPressのテーマにSimplicityを使用している場合、子テーマの「javascript.js」に上記のスクリプトをコピペすればよい。但しその場合は、冒頭と最後のscriptタグを除去すること。そのままコピペできるように上とほとんど同じであるが、貼り付け用のスクリプトを掲載しておく。

// Simplicity子テーマ貼り付け用
    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;
        }
    }

 

コメント