我使用Chrome扩展程序Web Override进行了一些操作,效果很好。现在我试图在Stack Overflow上隐藏某些用户的评论,但它似乎并没有起作用。我认为这是评论的加载方式。
这是javascript:
$(function() {
$('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();
});
如果我只是将$('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();
粘贴到控制台中,它会隐藏我的评论,但是当我正常加载页面时它不会这样做。
答案 0 :(得分:1)
一种可能的解决方案是使用MutationObserver()
。
这将允许您监听评论部分的任何更改并相应地做出反应。粗略的实现可以在下面看到。您创建观察者并为其提供隐藏功能,以便每次发生突变时它都会隐藏所有相关注释。
然后你告诉观察者观看帖子的评论部分。我相信你可以写一个更加jquery的方式来做这件事。现在它只关心它找到的第一个.comments
部分。这将监听任何子更改,属性更改和子树更改。
var observer = new MutationObserver(function (mutations) {
$('.comment-user:contains("DevilsAdvocate")').closest('.comment').hide();
});
observer.observe(document.querySelectorAll(".comments")[0], {
attributes: true,
childList: true,
characterData: true,
subtree: true
});
我不知道这会对性能产生什么影响,jQuery可能有自己的方式来观察DOM的变化。更好的方法是使用注释JavaScript代码进行面向方面编程,以便在发布新注释后立即调用您的hider,甚至可以在那里过滤注释。
或者,就我无法支持而言,请监听Stack Exchange API可能发出的事件,以便在加载新注释时通知您。
随之而来的问题是,我不相信Stack Exchange客户端JavaScript是任何公共API的一部分,因此对它的任何更改都可能会破坏您的代码。