1

コンテンツスクリプトを使用してテキストエリアの値を変更するブラウザ拡張機能(google chromeとfirefox)に取り組んでいます。私はこのスクリプトを使用しています:

グーグルクロームで私はこのスクリプトを使用します:

function print(msg, textarea){
  textarea.focus();
  textarea.click();
  textarea.value = '';
  for(var i=0; i<msg.length;i++){
    var e = document.createEvent('KeyboardEvent');
    e.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
    textarea.dispatchEvent(e);
    textarea.value += msg[i];
  }
}

AJAXを使用している一部のWebサイトでは、textareaの値が正しく更新されますが、フォームを送信すると、何らかの理由で古いtextareaコンテンツが代わりに投稿されます。手動で1つのキーを押すと、問題は解決します。

問題がどこにあるのか理解できません。jQueryで$(textarea).keydown()。keypress()。keyup()。change()または.blur()を試しましたが、役に立ちませんでした。

4

1 に答える 1

1

ウラジミールは正しいです、問題はしばしば隠されたフィールドとキーアップイベントについてです。トリガーの順序が重要です。私は正しい方法は次のとおりだと信じています:

for(var i=0; i<msg.length;i++){
  var e = document.createEvent('KeyboardEvent');
  e.initKeyboardEvent("keydown", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
  textarea.dispatchEvent(e);

  var e = document.createEvent('KeyboardEvent');
  e.initKeyboardEvent("keypress", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
  textarea.dispatchEvent(e);

  textarea.value += msg[i];

  var e = document.createEvent('KeyboardEvent');
  e.initKeyboardEvent("keyup", true, true, null, false, false, false, false, 0, msg.charCodeAt(i));
  textarea.dispatchEvent(e);
}

それはfirefoxとgooglechromeで動作しました(しかしfirefoxはinitKeyboardEventの代わりにinitKeyEventを使用します)

于 2012-06-10T21:35:11.383 に答える