Firefoxで起きたちょっと面白い変化
※確か54->55のVerUp時に発覚したお話です。今更55の話かよとか言わないで。
何がおきたの?
Firefoxにおいて、ある画面のsubmitが正常に動作しなくなったそうです。その画面はボタンを押されるとsubmitをtargetを変更しつつ二回行うことでタブを増やすような処理を行っていました。
なんとjQuery 1.6が使われていたぐらいには「れがしぃ」なコードです……
// ※たしかこんな感じだった……はず
$(function(){
var t = $("#test");
$("#b").click(
function(){
t.attr("target", "_self");
t.val(1);
t.submit(); // こっちが実質的に機能してなかった
t.attr("target", "_blank");
t.val(2);
window.setTimeout(function(){t.submit();}, 100);
return false;
}
);
})
なお「submit連打はねーよ」とか「なんでform追加で作らないんだ」とか「なんだってメソッドチェーンすらしないんだ」とか「1つのfunctionでこれとか何考えてんだ」とかそういうツッコミは受け付けません。
もう俺がツッコんだ後だよ。
どうやって直したのさ。
どうも聞いた限りだと、こんな感じ。
$(function(){
var t = $("#test");
$("#b").click(
function(){
t.attr("target", "_blank");
t.val(1);
t.submit();
window.setTimeout(function(){
t.attr("target", "_self");
t.val(2);
t.submit();
}, 100);
return false;
}
);
})
要するに、setTimeoutで2回目のsubmit周辺をまるごと切り離しているのです。
もともとこのsetTimeoutはChromeのSubmit連打対策として導入したもの。色々いじっているうちに「ひょっとしてここに全部ぶち込めば話が済むのか?」となったんだとか。
ただし、ところでこれでどうして直ったんだ?という謎が残っています……
なお、ちょっと聞いたところによると、「Firefox 55からマルチタスクな処理が強化されたからそのせいじゃないかなー?」とのこと。
確かにここらへんにそれっぽいことが書いてあるんだけど、つまり「submitは非同期な感じの処理になったんだよ!!」ということなんだろうか (その結果targetの書き換えが先に走ったとすれば説明がつく……よね?) 。
まとめ
連続Submitはどうあがいてもバグの味しかしないぞ!
投げっぱなしジャーマンでどっとはらい。
実際ちょっと原因が気になるので、どなたかご存知であればお教えください……
Author And Source
この問題について(Firefoxで起きたちょっと面白い変化), 我々は、より多くの情報をここで見つけました https://qiita.com/wingsys/items/8e461b9f7c138a3c4bbb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .