自動再表示の際の「フォームを再送信」ダイアログを抑制したい
リアルタイム監視のような用途の Web ページを作成する場合、
定周期(1分おきなど)で自動リロードするようにしておくと、
常に最新の情報が表示されて便利です。
HTMLでやる場合は
<meta http-equiv='refresh' content='60'>
JavaScriptでやる場合は
windows.location.reload();
といった感じで実現できます。
ところが HTML の中にフォームを含む場合、ブラウザによっては再表示の際、以下のようなダイアログが表示される場合があります。
いろいろ調べた結果、一番簡単な対処方法は URL を変えることのようです。なので、以下のように実装しました。
JS側で、POST先のURLをたとえば以下のように変更します。
windows.location = '/_reloaded';
次に、CakePHPのルーティング機能で本来のURLに戻してやります。
app/Config/route.php: Router::connect('/_reloaded', [ 'controller' => 'OriginalClassName', 'action' => 'index' ]);
これでダイアログが出なくなりました。めでたしめでたし。