Javascript пустая ошибка при использовании внешнего скрипта в приложении Rails - PullRequest
4 голосов
/ 03 февраля 2020

Я использую рекламный баннер от поставщика рекламных услуг, похожий на Google AdSense. Инструкция от их сайта четко и просто гласит, что все, что нам нужно сделать, это скопировать приведенный ниже код в тело нашей веб-страницы

<!-- Begin Hsoub Ads Ad Place code -->
<script type="text/javascript"><!--
  hsoub_adplace = [my account id];
  hsoub_adplace_size = '728x90';
//--></script>
<script src="http://ads2.hsoub.com/show.js" type="text/javascript"></script>
<!-- End Hsoub Ads Ad Place code -->

Я скопировал и вставил в мое приложение rails, внутри тела просмотреть файл, но баннер не отображается, и я вижу ошибку javascript (с источником проверки браузера)

Ошибка типа: document.getElementById (...) равен нулю

ps : в старых браузерах баннер отображается, но не в последних версиях браузеров.

ps2 : поддержка hsoub подтверждена несколько раз, там Это не проблема с их стороны (их код в порядке и работает на тысячах веб-сайтов, и моя учетная запись активна без проблем). И это должно быть проблемой из моего кода ... Я думаю, как Rails обрабатывает javascript ... Не могли бы вы помочь мне решить эту ошибку и отобразить баннер.

ps3 : Я использую рельсы 6.0.1 и турболинки 5.2.0

. Вы можете проверить код ошибки / исходный код онлайн на https://tafqit.com/

Ответы [ 2 ]

7 голосов
/ 11 февраля 2020

Проблема вызвана функцией Rocket Loader сервиса CloudFlare cdn

Rocket Loader сокращает время рисования для страниц, которые содержат Javascript. Посетители получат лучший опыт, увидев, что загрузка контента происходит быстрее, а скорость также является фактором, влияющим на некоторые рейтинги поиска.

Rocket Loader улучшает время рисования за счет асинхронной загрузки ваших Javascripts, включая скрипты сторонних производителей, чтобы они не блокировали рендеринг содержания ваших страниц.

Я отключил его, и сейчас появляется баннер.

2 голосов
/ 06 февраля 2020

Я собираюсь догадаться, что это проблема позиционирования скрипта. Похоже, что скрипт, возможно, ищет элементы, которые еще не визуализированы, то есть документ и тело документа не готовы. Переместите сценарии в конец страницы, т.е. после тегов body, и посмотрите, поможет ли это. В противном случае, пожалуйста, добавьте точную ошибку и, возможно, покажите сжатое представление вашей страницы и сценариев относительно других элементов.

<!DOCTYPE html>
<html>
    <head></head>
    <body>
        <h1>Hello world</h1>
    </body>

    <script type="text/javascript">
        hsoub_adplace = 12345;
        hsoub_adplace_size = '728x90';
    </script>
    <script src="http://ads2.hsoub.com/show.js" type="text/javascript"></script>
</html>

Мне удалось загрузить iframe, переместив сценарии

Скрипты (все еще) находятся внутри тегов body.

enter image description here

...