web-dev-qa-db-ja.com

JS onclick = "history.go(-1)は、私のドメインの下にある場合のみ

Joomlaサイトがあり、次の問題があります。製品の詳細ページに「検索ページに戻る」機能が必要です。初期の質問への回答に従って、いくつかの変更を加えた後、このコードを使用しています。

<br/><a href="" onclick="if (document.referrer.indexOf(window.location.Host) !== -1) alert('true'); { history.go(-1); return false; } else { window.location.href = 'mysite.com.br'; }"><?php echo JText::_('VOLTAR'); ?></a>

これで、訪問者が別のサイトから直接私の製品ページにアクセスしてこれをクリックすると、彼は私のサイトのホームページにリダイレクトされます。これは問題ありませんが、私のサイトの検索ページにいる場合は、製品ページをクリックして次に、戻るをクリックして検索リンクをクリックすると、訪問者も私のホームページにリダイレクトされますが、これは良くありません。前のページ、つまり自分の検索ページにリダイレクトする必要があります。

次のようなことを達成するためにこのコードを変更する方法はありますか?

訪問者が私の検索ページまたは私のサイトのどこからでも来た場合、これをクリックすると前のページにリダイレクトされ、訪問者が私のサイト外から来た場合、これをクリックすると私のホームページにリダイレクトされますか?

14
ol30cean0

document.referrerを使用して、window.location.Hostと比較できます。

if (document.referrer.split('/')[2] === window.location.Host)
if (document.referrer.indexOf(window.location.Host) !== -1)

したがって、HTMLは次のようになります。

<a href="" onclick="if (document.referrer.indexOf(window.location.Host) !== -1) { history.go(-1); return false; } else { window.location.href = 'website.com'; }"><?php echo JText::_('VOLTAR'); ?></a>
21
hexacyanide

インラインクリックハンドラーに分岐ロジックを追加すると、面倒になります。これを関数に移動して参照できれば、はるかに読みやすくなります。

if(document.referrer.indexOf('mysite.com') >= 0) {
    history.go(-1);
}
else {
    window.location.href = 'myHomePageUrl'; // this might just be '/' of your site
}

編集:ページのグローバルスコープに名前を追加する必要がない場合は、作成するリンクの直前にスクリプトタグで関数を作成できます。

<script>
    function backClick() {
        // above conditional goes here.
        return false;
    }
</script>
<br/><a href="" onclick="backClick()"><?php echo JText::_('VOLTAR'); ?></a>
3
Mike Edwards

上記のコードのいくつかを試しましたが、それを機能させるためにいくつかの変更を加える必要がありました。

  1. href = ""を削除します
  2. 「window.location.href」にはhttp://が必要です
_function backClick() {
                        if (document.referrer.indexOf(window.location.Host) !== -1) {
                                history.go(-1); return false;
                        }
                        else { window.location.href = 'https://stackoverflow.com'; }
    }_
<a onclick="backClick()">
1
Galili Omri