JS-файл Rails adblock ведет себя по-разному при производстве / разработке - PullRequest
0 голосов
/ 30 января 2019

У меня есть один файл, ads.js, расположенный в моей папке assets/javascripts в рельсах.Он содержит одну строку кода - canRunAds = true, которую я запрашиваю в другом месте моего приложения с помощью приведенного ниже сценария.Если он возвращает undefined, я отправляю сообщение adblock.

Он отлично работает в разработке, когда я его тестирую, и canRunAds действительно вернет undefined.В производстве, однако, с включенным adblock - он записывает сообщение Adblock not detected - т.е. он не работает должным образом.Странно, но я также получаю, что Chrome сообщает мне ERR_BLOCKED_BY_CLIENT для файла ads.js ... поэтому файл блокируется, но canRunAds все еще возвращает true, как?

Я предварительно скомпилировалмои активы, и файл ads.js определенно там.Мои знания о том, как рельсы загружают активы, достаточно ограничены, поэтому я не знаю, что делать с Google, чтобы решить эту проблему.Кто-то сказал мне, что рельсовое производство иногда будет «перезагружать и автозагрузывать все, когда угодно», но это вся информация, на которую я должен перейти ...

Любая помощь / указатели будут высоко оценены!

    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;

1 Ответ

0 голосов
/ 31 января 2019

понял, в конце концов.

Он работал в development, потому что rails обслуживал файлы статических ресурсов, например ads.js, по отдельности (поэтому adblock поднял имя файла и заблокировал его).Я думаю, это связано с тем, что установлена ​​переменная config.serve_static_files = true (хотя при производстве она имеет значение false).

В процессе работы содержимое файла было перенесено в application.js, поэтому имя файла не было выбрано.Я бросил его в папку public, и это помогло.

...