1

ユーザーがフォームを送信するときに何らかの作業を行う必要があるクロム拡張機能を作成しています。次のコードを実行するコンテンツ スクリプトをバックグラウンドで実行しています。

$(document.body).on('submit', 'form', function () {
         doWork();
});

これはほとんどのサイトで完全に機能しますが、Twitter のログイン フォームでは機能しません。しかし、奇妙なことに、それは完全には壊れません。twitter の「サインイン」ボタンをクリックdoWork()すると、関数が実行されます。ただし、Enter キーを押してフォームを送信すると、doWork()実行されません。

デバッグの際に、コードをコピーして開発ツールに貼り付け、関数を再バインドし、機能するかどうかを確認しました。それはありました-Enterを使用しても、新しいバインディングは機能しました。

次に考えたのは、jQuery.on が JavaScript 経由で作成された要素で動作していない可能性があるということでした(何らかの理由で、ボタンが表示フォームではなく、JavaScript 経由で非表示の動的に作成されたフォームを送信したと仮定します)。そのため、上記のようにイベントを再バインドしましたが、送信されたフォームのクラス名を警告する行を追加しました。すべてのフォームには、Twitter ログイン ページで一意のクラス名があります。

残念ながらご想像のとおり、[サインイン] をクリックするか、Enter キーを押すと、同じクラス名でアラートが表示されます。そのため、どちらの方法で見ても、そのフォームの送信にイベントがバインドされていますが、何らかのクレイジーな理由でEnterキーを押しても呼び出されません。

4

0 に答える 0