michihide's blog

技術メモおよび雑感

自動再表示の際の「フォームを再送信」ダイアログを抑制したい

リアルタイム監視のような用途の Web ページを作成する場合、
定周期(1分おきなど)で自動リロードするようにしておくと、
常に最新の情報が表示されて便利です。

HTMLでやる場合は

<meta http-equiv='refresh' content='60'>

JavaScriptでやる場合は

windows.location.reload();

といった感じで実現できます。

ところが HTML の中にフォームを含む場合、ブラウザによっては再表示の際、以下のようなダイアログが表示される場合があります。

20150605194354

いろいろ調べた結果、一番簡単な対処方法は URL を変えることのようです。なので、以下のように実装しました。

JS側で、POST先のURLをたとえば以下のように変更します。

windows.location = '/_reloaded';

次に、CakePHPのルーティング機能で本来のURLに戻してやります。

app/Config/route.php:
Router::connect('/_reloaded', [
   'controller' => 'OriginalClassName', 'action' => 'index'
]);

これでダイアログが出なくなりました。めでたしめでたし。