如何禁用或隐藏我网站上不需要的 Disqus 广告?

Posted

技术标签:

【中文标题】如何禁用或隐藏我网站上不需要的 Disqus 广告?【英文标题】:How do I disable or hide the unwanted Disqus ads on my website? 【发布时间】:2018-08-14 09:05:06 【问题描述】:

想象有一天,突然间,随机广告开始出现在您的网站上......

Recently Disqus started forcing unwanted ads inside of the Disqus comments,在您不知情的情况下在您的网站上展示这些讨厌的广告。他们似乎只针对每日流量“足够大”的网站或使用其他一些任意标准,因此广告不会出现在所有网站上,而只会出现在相对繁忙的网站上。

这样,Disqus “强制”您升级到付费订阅计划 - 对于付费用户,这些广告成为可选(即您可以在 Disqus 管理面板中禁用它们)。

如果您不想付款怎么办?如何禁用这些广告? 有没有简单、快速的解决方案?

至少在我们有时间切换到另一个评论系统之前。

【问题讨论】:

怀疑有什么办法。他们只是在偷偷摸摸,在这种情况下这很糟糕,因为它正在失去客户 如果您喜欢该产品,请为该服务付费或更改为其他服务并发表您的意见,以便公司知道他们的免费客户为何离开。 很公平,但这是一个改变的政策,他们甚至没有在这样做之前通知相应的网络管理员。因此,执行过渡的临时解决方案也是公平的。 我理解您的抱怨,我并不是说您有这种感觉是错误的,如果能收到有关更改的通知,那就太好了。然而,这很可能是对为非付费用户支付员工和服务器资源的一种回应。这可能不是最好的选择,但我觉得它相当标准。 【参考方案1】:

您可以使用 CSS 隐藏广告 iframe(请注意,@DanielGale 所说的是正确的 - 这将是一场猫捉老鼠的游戏,您的 CSS 选择器必须适应):

iframe[src*="ads-iframe"]  display: none; 

【讨论】:

最佳答案,简单而高效。感谢分享这个提示院长 自 2021 年 12 月起不再有效【参考方案2】:

截至撰写本文时,流行的 AdBlock 浏览器扩展似乎成功阻止了广告。但是,并非所有网站访问者都使用 adblock。

这是一个基于 jQuery 的快速隐藏广告解决方案:

(function($)
    setInterval(() => 
        $.each($('iframe'), (arr,x) => 
            let src = $(x).attr('src');
            if (src && src.match(/(ads-iframe)|(disqusads)/gi)) 
                $(x).remove();
            
        );
    , 300);
)(jQuery);

只需在 jQuery 加载后将其插入您的网站,在出现 Disqus cmets 的每个页面上。该代码会定期检查您的网站上是否存在 Disqus 广告,并删除它们的容器。你知道,以防万一他们再次出现。

【讨论】:

这将是一场猫捉老鼠的游戏。创建此函数以接收参数,以防他们更改广告的 ID/名称。 @Eric Gopak 不能在 2021 年工作【参考方案3】:

自从提出这个问题以来,Disqus 已经随着时间发生了变化。现在在 2021 年,Disqus 使用 iframes 具有无法区分的类名和 id。我发现当它显示广告时,它会显示最少 3 个 iframe,第二个 iframe 是评论部分本身,第一个 iframe 和第二个 iframe 之后的 iframe 是广告。 Disqus 开发人员也很聪明,在 初始加载时,Disqus 仅加载 1 个 iframe,即评论部分本身,并且在 延迟 ~0.5-1 秒后加载广告.所以你不能再用纯 CSS 删除它们了,因为你的 CSS 通常会在 Disqus 广告加载之前加载,所以我们必须编写一个延迟函数,等待广告加载。然后删除。

这是我在 JQuery 中的代码示例,适用于不同的网站:

const disqus = jQuery('#disqus_thread');

disqus.ready(function() 
  setTimeout(function() 
    if (disqus.children().length >= 3) 
      const comments = disqus.find('iframe:nth-child(2)').detach();
      disqus.empty().append(comments);
    
  , 2000);
);

我正在搜索disqus_thread id。然后函数等待2s。通常 1.5 秒是 Disqus 广告加载所需的最长时间。所以 2s 是等待广告加载的安全点。然后我检查 disqus div 有多少子元素。如果小于 3,说明 Disqus 没有加载广告,所以我们不需要删除任何元素。但是如果存在 3 个或更多子元素,我们会保存第 2 个子元素,即评论部分,然后删除 disqus div 中的所有元素,并重新添加评论部分。

这不是理想的解决方案。但到目前为止,它在多个网站上都对我有用。

【讨论】:

【参考方案4】:

我能够使用这个简单的 CSS 条目删除添加:

div#disqus_thread iframe[sandbox] 
        max-height: 0px !important;

之所以有效,是因为广告是在具有“沙盒”属性的 iframe 中投放的。

【讨论】:

【参考方案5】:

更新: 2021 年 12 月

截至 2021 年,之前的许多解决方案都不起作用。这是我想出的一个简单的解决方案:

Disqus 广告部分带有一个 iframe 标记,该标记具有 sandbox 属性。因此,您只需要将任何 iframe 元素的显示设置为已定义 sandboxnone

iframe[sandbox]:not([sandbox=""]) 
    display: none !important;

注意:如果您的网站中定义了任何其他具有sandbox 属性的iframe 标记,请务必小心。这可能会删除所有这些。

【讨论】:

【参考方案6】:

您可以为 WordPress 网站安装此插件:https://wordpress.org/plugins/remove-disqus-ads/

【讨论】:

【参考方案7】:

你可以在原版 javascript 中做到这一点

document.addEventListener('DOMContentLoaded', function () 
    let disqus = document.getElementById('disqus_thread');

    let remove_ads = setInterval(() => 
        let iframes = document.getElementsByTagName('iframe');

        for (var iframe in iframes) 
            if (typeof iframes[iframe].src === 'undefined') 
                continue;
            

            if (iframes[iframe].src.match(/(ads-iframe)|(disqusads)/gi)) 
                iframes[iframe].style.display = 'none';
                disqus.style.width = '100%';
            
        
    , 500);

    setTimeout(function () 
        clearInterval(remove_ads);
    , 5000);
);

【讨论】:

【参考方案8】:

用于在Disqus部分禁用“赞助”标签的广告

您的问题将由这个插件解决:

https://github.com/Muneebkh2/ads-disabler-disqus

如果您有任何其他疑问,请告诉我?

谢谢。

【讨论】:

【参考方案9】:

花了大约 40 分钟并尝试了不同的方法后,我使用以下 jquery 代码片段找到了解决方案。正如我们所知,disqus 在评论上方和下方都有广告部分,所有这些都在 iframe 中,id 以“dsq-app1320”开头(只有 4 位变化),所以代码 sn-p 是

$(window).on('load', function () 
    $("iframe[id^='dsq-app']").each(function (i, el) 
        if(i===0 || i===2) 
            el.remove();
        ;
    );
);

【讨论】:

看起来不错。但是当使用延迟加载加载 Disqus 时,这段代码是否有效? @RamakrishnaS 我知道这一点,实际上我是一名后端工程师,我对帖子评论上下部分的 disqus 广告感到非常恼火。我正在寻找解决方案,并在得到结果后将其发布在这里。 :D

以上是关于如何禁用或隐藏我网站上不需要的 Disqus 广告?的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用滚动而不隐藏它?

隐藏或禁用 Crystal Report 参数面板

如何在 DataGridView 中禁用或隐藏按钮

如何禁用或隐藏 UIPrintInteractionController 中的共享选项?

如何启用/禁用和/或显示/隐藏 GWT MenuItem

如何从 URL 传递关键字但将其隐藏? (广告词)