Safari 5系で、JavaScriptでformの値をsubmitできない不具合の対策
Safari 5.x系では、JavaScriptで window.onload を使って自動でフォームの内容を送信(submit)しても、正しく値を渡せないバグがあります。
現象と対策を整理しました。
具体的には下記のようなコードがうまくいきません。
page1.php -> page2.php -> page3.php の順に、usoFormの値をJSで自動でPOSTしています。
page1.php
page2.php
page3.php
<?php print_r($_POST); ?>```
正常なブラウザなら page3.php で表示される uso の値は「801」ですが、Safari 5.xの場合「800」が表示されます。
page2でPOSTしている値が、page1のもので上書きされてしまっているようです。
原因
下記のスレッドの内容は私が遭遇したケースと全く同じでした。
どうやら原因はSafariの自動補完機能のようです。
[What is the work around for a weird javascript form submit bug in Safari 5? - Stack Overflow](http://stackoverflow.com/questions/10546653/what-is-the-work-around-for-a-weird-javascript-form-submit-bug-in-safari-5)
Safari is filling in the form field using autofill behaviour. You probably have the "Other forms" option enabled in your preferences. Even Apple recommend you turn this feature off since it can be used for stealing private information.
対策
上記のベストアンサーでは、formタグにautocomplete="off"を指定してやれば直るとアドバイスされています。
実際に試してみたところ、正しくPOSTできるようになりました。
余談(文句)
問題が確認できたバージョンは、5.0.1, 5.1.4, 5.1.5 でした。
一度直ったバグが再発しているところを見ると、Safariの開発体制ではバグを正しく管理できていないようです。
フォーム送信が失敗するなんて、ブラウザとして致命的のバグなのですが。
参考
- [What is the work around for a weird javascript form submit bug in Safari 5? - Stack Overflow](http://stackoverflow.com/questions/10546653/what-is-the-work-around-for-a-weird-javascript-form-submit-bug-in-safari-5)
-
[Safari 5.1.7 - Changelog - Softpedia](http://mac.softpedia.com/progChangelog/Safari-Changelog-25616.html)
- Safariの更新履歴一覧。