IE7 - ページを更新すると、訪問したリンクが未訪問のリンクに戻ります
-
23-09-2019 - |
質問
多くのユーザーが 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 リンクを訪問済みの状態に維持できる回避策を知っている人はいますか?
ありがとう。
解決
あなたは本当に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
に忘れてしまったので、先頭にページをスクロールし、それはURLではありませんよう、イベントハンドラの開始時にjavascript:
は無意味です。 (この文脈では、javascript:
は、誰が今まで本当に使用していないことはほぼ-完全-無意味な言語機能である行ラベル、としている。)
これは、あなたがしたいと思うのマークアップの種類があります:
<a href="http://www.google.com/" onclick="window.open(this); return false;">Google proper link</a>
(現実には、あなたがしたい、おそらく控えめなスクリプトそのonclick
属性が含まれるのではなく。)
このJavaScriptが利用可能かどうか、すべてのデバイス、視覚的なブラウザでは動作したりしません、それはステータスバーで適切なリンクを紹介します、そして、それは、ユーザがミドルクリックのようにすべての彼らの通常のブラウザツールを使用することができます代わりに、同じページ、空白ページまたはエラーを取得せずに、リンクを右クリックし、ブックマーク・リンク - 新しいタブ-forもしくはます。
は当然のことながら、それはまた、正しくスプリアスjavascript:
擬似URLより正確であることがはるかに可能性が高いターゲットページ自体の訪問/未訪問の状態を反映します。実際に訪問された実際の場所にhref
属性をポインティングする:visited
レンダリングを取得する唯一の信頼できる方法である。
他のヒント
興味深いことに、これまでこの問題に遭遇したことはありませんでしたが、それは理にかなっています。
考えられる回避策 (今はテストできないので、必要に応じて試してもらえるようにここに投げる必要があります):
一意のハッシュを使用します。
<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 -->
ただし、このメソッドが URL を訪問済みとして登録するかどうかはわかりません。
false
クリックイベントで。
おそらくこれらのいずれかがそれを修正します。