6

ユーザーがGoogle Plusでメッセージ(ステータス)を入力するcontenteditable divでスペースバーのキーダウンをシミュレートする必要がある拡張機能を作成しています。

plus.google.com を開き、メッセージを入力する必要がある div をクリックすると、メッセージ内にリンクを入力して {スペースバー} を押すと、Google がタイトル、画像、説明を取得することに気付くでしょう。そのリンク。スペースバーのキーダウンをシミュレートしようとして3日間です。フォームの要素の上でマウスオーバーをシミュレートできます。送信ボタンでクリック()をシミュレートできますが、スペースバーのキーダウンをシミュレートすることはできません。

これまでのところ、私の最高のコードは次のとおりです。

var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : " ", char : " ", shiftKey : false, keyCode: 32, which: 32, view: window});
//I need to delete the e.keyCode and e.which cause Chrome sets it as a readonly but for some reason if you delete it and assign a new value Chrome accepts (I am very sure this is a serious bug that I discovered in Chrome and that I already reported yesterday in theis bug tracker)
delete e.keyCode;
Object.defineProperty(e, "keyCode", {"value" : 32});
delete e.which;
Object.defineProperty(e, "which", {"value" : 32});

$(".Cla").find(".be.c-B").children().eq(1).get(0).dispatchEvent(e);

どうもありがとう。

編集:

テストに役立つかどうかはわかりませんが、次のことをお勧めします。

opened_window = window.open("http://plus.google.com");

その後、div をクリックして展開し、その後、次のコードを実行します。

$(".Cla").find(".be.c-B").children().eq(1).html("The site stackoverflow.com is amazing");

var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : " ", char : " ", shiftKey : false, keyCode: 32, which: 32, view: window});
delete e.keyCode;
Object.defineProperty(e, "keyCode", {"value" : 32});
delete e.which;
Object.defineProperty(e, "which", {"value" : 32});

$(".Cla").find(".be.c-B").children().eq(1).get(0).dispatchEvent(e);

何らかの理由で、これはリンク情報の取得をトリガーしません。ただし、div をクリックしてスペースバーを押すと、Google がそのリンクに関する情報を取得することがわかります。

4

1 に答える 1