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

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

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

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

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

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

【问题讨论】:

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

标签: javascript comments ads 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
              猜你喜欢
              • 2019-08-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-10-11
              相关资源
              最近更新 更多