3

他の人気のあるブラウザではこの問題は発生していません。JSPページ(Page1.jspと呼びましょう)で、別のページに移動するフォームをクリックします。Operaの[戻る]ボタンをクリックすると、Page1.jspに戻りますが、JavaScriptまたはJSPコードが再起動されていません。例えば、

<!-- Inside header tag -->
<script language="JavaScript>
  alert("Does this work in Opera?");
</script>

単純なアラートステートメントは起動しません。サーバー側のコードについても同じことが言えます。ただし、他の一般的なデスクトップブラウザには問題はありません。

どうすればこれを修正できますか?

助けてくれてありがとう。

アップデート

Page1.jspには、送信フォームが存在するフレーム/ iframeが含まれていることをお伝えしておきます(これについてはお詫び申し上げます)。ユーザーがフォームを送信すると、frame/iframe内に新しいページが読み込まれます。この時点で、ユーザーがブラウザの戻るボタンをクリックすると、Page1.jspがキャッシュされているのがわかりますが、frame/iframeがリロードされます。これは、Operaを除くすべての一般的なブラウザで発生します。

4

2 に答える 2

3

実際、ほとんどのブラウザはこのように動作し、訪問したページを「最初から」リロードするのではなく、ブラウザを元の状態に戻します。これは通常は良いことであり、ナビゲートが速くなります。

'状態を保存'するブラウザはアンロード時にそうします。それをオーバーライドするには、アンロードハンドラを独自のブラウザに置き換えることができます-

<script>
alert('loaded');

onunload=function(){ return true; }
</script>

ユーザーがブラウザで何らかの自動保存を設定して、訪問間のフォームの状態を記憶できるようにすることができます。このため、アンロードハンドラでフォームフィールドをデフォルトに手動で設定する必要があります。

于 2012-04-12T14:46:08.580 に答える
1

@kennebec:ありがとうございます。あなたの答えのおかげで、私はもう少し掘り下げることができました、そして私はここでスタックオーバーフローの質問ここで問題に対処するOperaの記事を見つけました:

history.navigationMode = "compatible"; // Opera only property
$(document).ready(function() {
  alert("test");
});

このサイトによると、navigationModeはOperaブラウザでのみサポートされています。したがって、これは完全に機能し、アンロードイベントをスクリプト化する必要はありません。pageshow / pagehideを調べましたが、クロスブラウザーに完全に準拠しているようには見えません。また、HTML5にはonpageshow / onpagehideがありますが、クロスブラウザーに不満があり、レガシーブラウザーをサポートする必要があります。

于 2012-04-12T16:20:30.230 に答える