2

多くのユーザーが IE6 から IE7 にアップグレードしました。アップグレードされたユーザーは、ページの更新後に訪問したリンクが未訪問の色に戻るという問題を報告しています。これは、ハード コードされた URL の代わりに JavaScript を使用しているリンクでのみ発生します。

<script lang="JavaScript">
<!--
 function LoadGoogle()
 {
  var LoadGoogle = window.open('http://www.google.com');
 }
-->
</script>

<a href="javascript:LoadGoogle()">Google using javascript</a>
<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>

上記のリンクは、ページが更新されるたびに未訪問の色に戻ります。ポストバック、更新または f5 ボタンを手動で押す、または自動更新機能によってページが更新されるかどうかは問題ではありません。上記のコードは実際に起こっていることを単純化しすぎていることに注意してください。しかし、問題を十分に説明していると思います。

これは、ユーザーに問題を引き起こしています。項目をクリックすると、JavaScript を介してすべて新しいウィンドウで開かれる項目のリストをユーザーに提供しているためです。ユーザーが操作を終了したら、親ページを更新します。親ページが更新されるたびに、これらのリンクはすべて未訪問の色に戻ってしまうため、ユーザーは自分がどの項目で作業したか分からなくなります。

私は掘り下げてきましたが、これは意図された動作のようです。IE7 は、これらのリンクをブラウザーの履歴に登録しません。アプリ コードの大幅なオーバーホールを行わなくても、これらの JavaScript リンクを訪問済みの状態に保つことができる回避策を知っている人はいますか?

ありがとうございました。

4

2 に答える 2

1

javascript:URL が訪問済み/未訪問の状態を維持することは期待できません。それらは実際の場所ではなく、現在のドキュメントで実行するブラウザへのコマンドです。

javascript:URL も使用しないでください。

<a href="javascript:LoadGoogle()">Google using javascript</a>

これは、アクセシビリティとユーザビリティにとって完全な災害です。通常は SEO の理由もありますが、内部アプリの場合は問題になりません (そして、Google はあなたの助けがなくても SEO でうまくやっている可能性があります. ;-))

<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>

これは同じ理由でまだ悪いです。さらに、クリック ハンドラーを忘れてreturn falseいるため、ページが一番上までスクロールしjavascript:、イベント ハンドラーの先頭にある は URL ではないため意味がありません。(このコンテキストでjavascript:は、 は行ラベルと見なされます。これは、誰も実際に使用することのない、ほぼ完全に無意味な言語機能です。)

これはあなたが望むマークアップの種類です:

<a href="http://www.google.com/" onclick="window.open(this); return false;">Google proper link</a>

(実際には、属性を含めるのではなく、目立たないスクリプトにすることをお勧めしonclickます。)

これは、JavaScript の有無、ビジュアル ブラウザの有無にかかわらず、すべてのデバイスで機能し、ステータス バーに適切なリンクが表示され、ユーザーはミドルクリックなどの通常のブラウザ ツールをすべて使用できるようになります。同じページ、空白のページ、またはエラーを取得せずに、リンクの新しいタブまたは右クリックのブックマークリンク。

javascript:当然、ターゲット ページ自体の訪問済み/未訪問状態も正しく反映されます。これは、偽の疑似 URLよりも正確である可能性がはるかに高くなります。実際hrefに訪問した実際の場所を属性で指すことが、:visitedレンダリングを取得するための唯一の信頼できる方法です。

于 2010-03-29T23:10:48.940 に答える
0

興味深いことに、これまでこの問題に遭遇したことはありませんが、理にかなっています。

考えられる回避策 (今はテストできないので、必要に応じて試すためにここに投げる必要があります):

  • 一意のハッシュを使用します。<a href="#JavaScriptLoadGoogle" onClick="...

    おそらくこれで、IE がこのリンクを永続的に「訪問済み」にするのに十分です。これは有効な場所です。(その名前の実際のアンカーがページに存在する必要はありません。)

  • これが JS を必要とhrefするアプリケーションである場合は、訪問されることを 属性に入れることができます。

    <a href='http://www.google.com' 
       onclick='LoadGoogle(); return false;'>  
    <!-- You don't need the Javascript: prefix here -->
    

    falseただし、クリック イベントで返されるため、このメソッドが URL を訪問済みとして登録するかどうかはわかりません。

たぶん、これらのいずれかで修正されます。

于 2010-03-29T21:12:02.707 に答える