0

我有一个文件,ads.js位于我assets/javascripts的 rails 文件夹中。它包含一行代码 - canRunAds = true,我使用下面的脚本在我的应用程序的其他地方查询。如果它返回undefined,我会提供一条广告屏蔽消息。

当我测试它时,它在开发中完美运行,并且canRunAds确实会返回undefined. 然而,在生产中,打开 adblock - 它会记录消息Adblock not detected- 即它不能按预期工作。奇怪的是,我也让 Chrome 告诉我ERR_BLOCKED_BY_CLIENT文件ads.js...所以文件被阻止,但canRunAds仍在返回true,怎么办?

我已经预编译了我的资产,并且ads.js文件肯定在那里。我对 Rails 如何加载资产的知识非常有限,以至于我不知道接下来要谷歌做什么来解决这个问题。有人告诉我,rails 生产有时会“随时重新加载和自动加载所有东西”,但这就是我必须继续的所有信息......

任何帮助/指针将不胜感激!

    function detectAdblock(){
      if( window.canRunAds === undefined){
        console.log("Adblock detected")
        var donateBanners = document.getElementsByClassName("donations");
        for (i = 0; i < donateBanners.length; i++) {
            donateBanners[i].style.display = "block";
            console.log("Banner displayed! " + i)
        }
      }
      else {
        console.log("Adblock not detected");
      }
    }
    window.onload = detectAdblock;
4

1 回答 1

0

最终想通了。

它之所以起作用,是development因为 rails 正在ads.js单独提供静态资产文件(因此 adblock 获取了文件名并阻止了它)。我认为这是因为变量config.serve_static_files = true已设置(而在生产中为假)。

在生产中,文件内容被铲入application.js,因此文件名没有被拾取。我把它扔进了public文件夹,就成功了。

于 2019-01-30T21:20:24.357 回答