我的公司使用基于 Web 的产品,其 UI 要求我们针对某些用例单击 200 多个复选框。我们已请求“取消选中所有”功能,但显然不会。
我尝试编写一个简单的 GreaseMonkey 脚本来解决这个问题:
$('img').click(function() {
$('input.HideQuestion:checked').each(function() {
$(this).click();
});
});
(在我用作点击目标的页面上有一张图片,我们的徽标)
问题是,每次我单击图像时,只有一个(约 270 个)复选框受到影响。每一次额外的点击都会影响下一个复选框。
我可以看到每次选中复选框时网站都会进行 Ajax 调用,但是该 Ajax 调用的响应主体是空的,所以我认为它们只是在更新服务器上的状态,而不是替换页面的一部分。
为什么只有一个复选框最终未被选中?
当我使用替代方法时
$(this).prop("checked", true);
所有复选框在视觉上都未选中,但不会发生 Ajax 调用,并且服务器状态永远不会更新。此外,当我选中任何复选框时,所有复选框都会恢复到 GreaseMonkey 之前的状态。
更新
我尝试了@BrockAdams 建议的以下两种方法来拦截 Ajax 调用。两个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!');
}
);