19

リンクの訪問ステータスをリセットする方法はありますか?

シナリオは次のとおりです: 自然に多くのリンクがあるイントラネット サイトでは、一定期間だけリンクが "訪問済み" の状態になるようにしたいと考えています。したがって、リンクの訪問済みステータスを操作する方法を探しています。

これは実行可能ですか?もちろん、クロスブラウザである必要があります。

ETA: クライアント側のソリューションは完全に受け入れられます。好ましい.. :-)

ETA-2: Cookie は許可されます。ここで禁止されているホールドはありません:-)

4

10 に答える 10

8

:visited ブラウザーがCSS 疑似クラスの適用を選択すると、リンクは「訪問済み」として表示されます。

リンクを未訪問の状態にリセットするクライアント側の方法は、(どういうわけか) 閲覧履歴をクリアすることです。それを行う移植可能な方法があることを知って、私は非常に驚いています。また、Firefox 3 のような履歴に依存するスマート ロケーション バーの動作が損なわれるなど、不快な副作用もあります。

Drew Noakes が提案したように、サーバー側の方法は、ノイズ クエリ パラメータをリンクに追加し、クエリ パラメータを定期的に変更することです。これは、あなたが望む振る舞いの悪い近似を与えるだけです。「正しい」動作を得るには、サーバー側でユーザーごとに訪問したページの履歴を追跡する必要があるため、必要な時間の後にのみ特定のページのノイズパラメーターを変更できます。

結局のところ、実際に「リンクの訪問済みステータスをリセット」しようとするのはおそらく悪い考えです。

より良い解決策は、:visited 疑似クラスが :link 疑似クラスと同じようにレンダリングされるように、ページ スタイルを微調整することだと思います。次に、ユーザーごとに訪問したリンクのサーバー側の履歴を保持し、明示的なvisitedクラスを使用してリンクの表示を調整します。

ユーザー ID が手元になく、ログインを必要としない場合は、いつでもランダム永続 Cookie を使用できます。

于 2008-10-20T08:33:40.830 に答える
7

私はまさにその考えに何か臭いを感じます。

リンクの訪問ステータスをリセットする目的は何ですか? いくつかの新しいデータが利用可能であることを通知するには? 「NEW」イメージのようなもっと冗長なものがより適切でしょうか?

一方、本当にこれを行う必要がある場合は、URL を変更してください

于 2008-10-20T09:16:37.997 に答える
6

「訪問済み」リンクの外観を一定時間変更したいだけですか? :visitedこれは、ブラウザーの疑似クラスをバイパスして、カスタム クラス名を割り当てるだけであれば簡単です。クッキーを使用します。有効期限が組み込まれています。

リンクをクリックしたときの JavaScript ハンドラを設定します。擬似コード:

function clickHandler(event) {
  var href = /* (figure out which anchor was clicked and get the href) */
  // (you might need to escape the href)

  setCookie(href, "visited", 5); // set cookie for 5 days
}

リンクをたどる直前にこの関数を実行します。

次に、ページの読み込み時に、次のようなことができます。

function markVisitedLinks() {
  var anchors = document.getElementsByTagName("a");

  for (var i = 0; i < anchors.length; i++) {
    if (readCookie(anchors[i].href) == "visited") {
      anchors[i].className += " visited";
    }
  }
}

QuirksModeからsetCookie および readCookie 関数を取得します。

于 2008-10-20T18:41:42.113 に答える
4

「URLの変更」を伴う単純なサーバー側のソリューションの場合、次のようになります。

http://url1?expire2008_10_20 」は、24時間後に「http://url1?expire2008_10_21 」になり、

大丈夫ではありません。次を使用できます。

サーバーがブラウザに Cookie を保存し、リンクを最後に訪れた時刻を記録します。多くのリンクがあり、Cookie の最大長が十分でない場合は、次のことができます。

  1. セッション Cookie を保存し、訪問したデータをサーバーに保持する
  2. Cookie のフラッシュ アナログを使用する - ローカル共有オブジェクト

また、最終訪問時間が期限切れになった場合に、クライアントの URL をランダム化するコードを配置します。

于 2008-10-20T08:33:10.377 に答える
2

これはブラウザのプロパティであり、サーバー側から制御できないと思います。

1 つの「ハック」は、リンクの最後に未使用のクエリ文字列を追加し、それらを定期的にローテーションすることです。これは、特定のクライアントの「訪問済み」状態の長さが、一定期間ではなく、クエリ文字列がいつ回転するかに依存することを意味します。

于 2008-10-20T08:10:39.987 に答える
1

リンクの仕組みを変更すると、通常、ユーザーが混乱したり動揺したりします。これは、サイトのユーザビリティを低下させる確実な方法です。

あなたは本当に何を達成しようとしていますか?

サイトに変更する (新しいコンテンツを指す) サブページがある場合、ユーザーはそれを理解します。ページ構造の 2 ~ 3 レベルの深さから素晴らしい新しい記事がある場合、それが重要な場合は、メイン ページにリンクを含む新着情報セクションを追加します。(または、電子メールでリンクを含む通知を送信するか、または...)

于 2008-10-20T18:54:59.593 に答える
1

リンクの CSS プロパティをフォーマットして、:visitedクリックされていないように見せるだけで十分ですか?

訪問したリンクをしばらく追跡したいのか、それとも常に同じように表示したいのかわかりません。後者の場合は、単純な CSS (以下のように) で十分です。

a, a:visited {
     color: blue;
     text-decoration: underline
}

a:hover, a:active {
     color: orange;
}

于 2008-10-20T19:04:54.127 に答える
0

ユーザーセッションへのタイムスタンプとともにアクセスされたURLのリストを維持します。

リンクページが読み込まれたとき

  • 古いURLをフラッシュする
  • 訪問したリストに含まれるスタイルリンク。
于 2008-10-20T09:22:34.787 に答える
0

問題は純粋に視覚化であるため、何らかの方法で訪問済みリンクを未訪問に戻すことを心配する必要はありません。

リンク スタイルを訪問済み状態に似たものに変更する onclick ハンドラーをリンクに追加します。このハンドラーから、たとえば次のことができます。リンク ステータスを Cookie に書き込みます。

次に、表示されなくなったリンクがあるかどうかを定期的に確認し、スタイルを通常に戻すことができます。

于 2008-10-20T09:47:00.010 に答える
0

ターゲット ページを変更して、クエリ文字列からパラメーターを受け取り、適切な有効期間を持つ Cookie をその値に設定します。

参照ページで、Cookie の存在を確認する Javascript を配置します。

存在しない場合は、Javascript で大きな乱数を含むパラメーターを URL に追加します (そのため、ブラウザーの履歴はそれを認識しません)。

存在する場合は、Javascript に Cookie と同じ値のパラメーターを追加してもらいます (ブラウザーの履歴がそれを認識できるようにします)。

ノート:

  • リンクのターゲットは、参照ページと同じドメインにあると想定しています。そうでない場合は、同じドメインのリダイレクト ページを使用します。

  • これは、ブラウザの履歴が Cookie の存続期間と同じである場合にのみ機能します。ブラウザの履歴が短いか、まったくない場合、クライアントはそれを訪問済みとして表示しません。

  • これをしないでください!ユーザーは、「訪問」が何を意味するかをよく理解しています。それを壊さないでください-あなたはそれらを混乱させるだけです.

  • Javascript を実行していない人のために、サーバー側のソリューションを検討する必要がありますか?

  • このデザインはテストしていません。

于 2008-10-20T08:38:21.193 に答える