グーグルクロームのプラグインを作りました
タスク (sportingbet.com):
- 賭け金を入れる
- バスケットを提出する
問題:
$(".userItems input.amount").val(110);
-> 動作します (ただし、キーアップをトリガーする必要があります)$(".userItems input.amount").keyup();
-> 機能しませんが、コンソールにこれを入力すると機能します。
違いは何ですか?
グーグルクロームのプラグインを作りました
タスク (sportingbet.com):
問題:
$(".userItems input.amount").val(110);
-> 動作します (ただし、キーアップをトリガーする必要があります)$(".userItems input.amount").keyup();
-> 機能しませんが、コンソールにこれを入力すると機能します。違いは何ですか?
これはたいてい興味深いものですが、1 つの角度は、シミュレートされたキー イベントを作成することです。
function simulateKeyEvent() {
var event = document.createEvent("KeyboardEvent");
event.initKeyEvent(
"keyup",
true /*let event bubble up*/,
true /*can the event be canceled?*/,
null,
false /*ctrl key held down?*/,
false /*alt?*/,
false /*shift?*/,
false /*meta (cmd)?*/,
9 /*keyCode*/,
0);
var cb = document.getElementById("checkbox");
var canceled = !cb.dispatchEvent(event);
if(canceled) {
// A handler called preventDefault
alert("canceled");
} else {
// None of the handlers called preventDefault
alert("not canceled");
}
}
さて、実際に問題を解決するには、ページの JavaScript で、拡張機能の分離された世界の外でコードを実行することをお勧めします。これを行うために、気の利いた機能があります。
function runInPage(code) {
var script = document.createElement('script');
script.innerHTML = code;
document.documentElement.insertBefore(script);
}
それから試してくださいrunInPage('$(".userItems input.amount").keyup();');
ただし、おそらくその前に jQuery をロードする必要があるため、次のようにします。
var jq = document.createElement('script');
jq.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js';
document.documentElement.appendChild(jq);
引数なしの .keyup() は、その入力の keyup イベントにアタッチされたコールバックをトリガーするだけです
.val(110) 入力要素の値を設定するだけなので、イベントがトリガーされません。
.val(110).keyup() は両方を行います