私の会社は Web ベースの製品を使用しており、その UI では、使用例によっては 200 を超えるチェックボックスをクリックする必要があります。「すべてのチェックを外す」機能をリクエストしましたが、予定されていないようです。
この問題を解決するために、簡単な GreaseMonkey スクリプトを作成しようとしました。
$('img').click(function() {
$('input.HideQuestion:checked').each(function() {
$(this).click();
});
});
(私がクリックターゲットとして使用しているページには、当社のロゴの画像が 1 つあります)
問題は、画像をクリックするたびに、(~270 のうちの) 1 つのチェックボックスだけが影響を受けることです。さらにクリックするたびに、次のチェックボックスに影響します。
チェックボックスがチェックされるたびに Web サイトが Ajax 呼び出しを行うことがわかりますが、その Ajax 呼び出しの応答本文は空であるため、ページの一部を置き換えるのではなく、サーバーの状態を更新しているだけだと思います。
チェックボックスが 1 つだけオフになるのはなぜですか?
別のアプローチを使用する場合
$(this).prop("checked", true);
すべてのチェックボックスが視覚的にオフになっていますが、Ajax 呼び出しは発生せず、サーバーの状態は更新されません。さらに、チェックボックスをチェックすると、すべてのチェックボックスが GreaseMonkey 以前の状態に戻ります。
アップデート
Ajax呼び出しをインターセプトするために、@BrockAdamsが提案した次の両方を試しました。どちらのalert()も呼び出されていません。
XMLHttpRequest.prototype.open をオーバーライドし ます https://stackoverflow.com/a/7778218/141172
(function() {
var proxied = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
alert('A-ha! Open!');
return proxied.apply(this, [].slice.call(arguments));
};
})();
.ajaxSuccess()
https://stackoverflow.com/a/8252726/141172を使用して、ターゲット ページの AJAX をインターセプトします。
// Also tried: unsafeWindow.$('body').ajaxSuccess (
$('body').ajaxSuccess (
function (event, requestData)
{
alert('A-ha. Success!');
}
);