ユーザーがリンクをクリックしたり、フォームを送信したりすると、短い猶予時間でリクエストを忘れて忘れてしまいます。ここで私が使用している単純化されたコードです:これはclick
イベントのために正常に動作し、それがFirefoxではなく、Chromeでsubmit
イベントのために正常に動作しますChromeでフォームを送信するのが遅い
element.addEventListener(eventType, function(event) {
if (event.retriggered) {
return true;
}
let target = event.target;
let newEvent = new event.constructor(event.type, event);
newEvent.retriggered = true;
setTimeout(() => {
target.dispatchEvent(newEvent);
}, 250);
// fire and forget the request
makeRequest();
event.preventDefault();
return false;
});
。私はfiddle hereを作成しました。 Firefoxでは、ボタンをクリックすると、ブラウザがGETリクエストを行っていることがわかりますが、それはChromeでは発生しません。私のテストによると、元のイベントと新しいイベントは両方のブラウザで同じに見え、dispatchEvent
はtrue
を返します。それでもChromeで実際の送信が開始されていないため、Chromeがセキュリティ対策として送信を停止しているのか、何か不足しているのでしょうか?
。私は特別なケースを含まないソリューションを望んでいましたが、Chromeのセキュリティ機能により、プログラムによるイベントがフォームのサブミットを引き起こさないように見えます。 –
'form'要素のチェックを本当に嫌うなら、' target [event.type](); 'を試すことができます。 – Thijs