IE7(内部Webサイト)でのみ実行されるasp.netアプリケーションがあります。
ユーザーがデータを入力する必要があるとき、私はフォームで子ウィンドウをポップアップします。フォームが閉じると、javascript:window.opener.location.reload(true)が呼び出され、新しいデータがメインページに表示されます。
問題は、ブラウザがページを再投稿する必要があると文句を言うことです。この機能をオフにする方法はありますか?
IE7(内部Webサイト)でのみ実行されるasp.netアプリケーションがあります。
ユーザーがデータを入力する必要があるとき、私はフォームで子ウィンドウをポップアップします。フォームが閉じると、javascript:window.opener.location.reload(true)が呼び出され、新しいデータがメインページに表示されます。
問題は、ブラウザがページを再投稿する必要があると文句を言うことです。この機能をオフにする方法はありますか?
いいえ、しかし解決策はあります。誰かがページにデータを投稿した直後に 302 リダイレクトを使用するのは、一般的に良い設計と考えられています。これにより、そのポップアップが発生しなくなります。詳しく説明させてください。
1) ユーザーがフォームに入力し、POST 経由でデータを送信します。
2) バックエンドはデータを受け取り、それに基づいて動作します。
3) コンテンツをユーザーに返す代わりに、バックエンドはページの処理が完了するとすぐに 302 リダイレクトを発行します (必要に応じて、ユーザーをまったく同じ URL にリダイレクトする可能性があります)。
4) ユーザーに表示されるページは、ブラウザにリダイレクトするように指示したページです。リダイレクトされたページを標準の GET リクエストで読み込みます。ページを更新しようとしても、データは再送信されません。問題が解決しました。
これは、ASP.NET の通常の「ポストバック」方法の問題です。この警告なしでページをリロードする必要がある場合、このページは POST ではなく GET から取得する必要があります。Response.Redirect("...") を自分で実行できます。しかし、これはビューステートの使用を破壊します。
asp.net mvc は、この問題を修正します。ie7 だけの問題ではなく、ほとんどのブラウザのセキュリティ機能です。ページ全体をリロードするのではなく、js を使用してメイン フォームのコンテンツを更新することを除いて、私が知っている修正はありません。
それを行う方法があるとは思いません。代わりに、リロードせずに親ウィンドウをページに誘導しないでください。
javascript:window.opener.location='あなたの URL'
これは、window.opener のページが POST リクエストから来ているためです。javascript:window.opener.location = window.opener.location; POST なしでデータを取得できる場合は、GET 要求のみを実行します。
ページ 1 からページ 2 に移動し、ブラウザーがページ 1 に戻らないようにする場合は、ページ 1 の上部に次の行を追加します。
<script>
if(window.history.forward(1) != null)
window.history.forward(1);
</script>
私の知る限り、スクリプト経由ではありません。
あなたは試すことができます:
window.opener.location = '#';
ブラウザの再投稿を回避する必要があります。また、必要に応じてハッシュ名を調整できます。