Могу ли я поставить _s satellite.pageBottom (); на файл JS? - PullRequest
0 голосов
/ 27 мая 2019

Обычно вы помещаете метод _s satellite.pageBottom () как можно больше в самую нижнюю часть HTML, например:

...
<script type="text/javascript">_satellite.pageBottom();</script>
</body>
</html>

Но в браузере появляются ошибки, которые либозаблокирован при загрузке из-за слишком большой полосы пропускания, или браузер просто не дает ему загружаться или задерживает загрузку, что приводит к ошибке _satellite undefined

Итак, я сделал, чтобы поместить ее в файл JS и добавить defer="defer" attribute

...
<script src="/js/satellite.js?t=153664965811" defer="defer"></script>
</body>
</html>

Так что теперь это работает нормально, если браузер не блокирует отслеживающий API JS.

Так можно ли это делать?

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Резюме

Официально вы не должны делать такие вещи.

Детали

Документация гласит следующее:

Важно: для успешной реализации очень важно, чтобы вы следуйте этим инструкциям, отображаемым в справке Adobe. В частности, Вы должны поместить код заголовка в раздел <head> вашего документа шаблоны. Кроме того, вы должны поместить код нижнего колонтитула непосредственно перед закрывающий тег </body> Размещение любого из этих кодов вставки в другом месте ваша разметка или использование асинхронных методов для добавления кодов вставки, или перенос кодов вставки любым способом, не поддерживается реализации динамического управления тегами. Код для вставки должен быть реализовано точно так, как предусмотрено.

Неподдерживаемая реализация даст неожиданные результаты и предотвратить обслуживание клиентов и инжиниринг с помощью осуществление.

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

Неофициально ..

Хорошо, во-первых, вы упомянули о получении ошибок, когда пытались делать подобные вещи. Во-первых, мне немного неясно, о каких ошибках вы упомянули. В частности, ошибка _satellite undefined. Для меня это звучит так, будто вы пытались загрузить асинхронный и / или отложенный сценарий Header , и библиотека DTM не была загружена вовремя до фрагмента Footer (_satellite.pageBottom()) назывался. Но вы не упомянули об этом в своем вопросе; Вы упомянули только проблемы с фрагментом Footer .

Опять же, официально, вы не можете делать такие вещи с или из фрагментов. Но даже если вы решите отклониться от документации, вам обязательно нужно убедиться, что фрагмент заголовка загружен до нижнего колонтитула, иначе вы получите ошибки типа "_satellite is undefined", потому что сценарий заголовка - это то, где _satellite определены. Поэтому, если вы хотите поиграть в асинхронном и / или отложенном выполнении, вам следует изучить цепочки обещаний или обернуть скрипт Footer в какую-то логику, которая ищет _satellite и, если не найден, setTimeout, чтобы снова попытаться найти число раз. Или ..

При готовности DOM, если _satellite.pageBottom() еще не выполнено, DTM самостоятельно вызовет его. Таким образом, технически вам даже не нужно включать скрипт Footer на ваш сайт, если вы собираетесь использовать полную асинхронную / отложенную реализацию.

На этом замечании ... переход на полностью асинхронную / отложенную реализацию DTM означает, что вы должны обеспечить, чтобы все , развертываемое через DTM, также было асинхронным. Я понятия не имею, что все вы развернули через DTM, но на практике, как минимум, у вас почти наверняка есть службы Experience Cloud ID (ECIDS) и Adobe Analytics (AA), развернутые через DTM, и DTM в настоящее время не поддерживает их развертывание. в асинхронном режиме (ECIDS должен быть загружен до AA). И это всего лишь один пример тега / инструмента.

Так что, как минимум, вы должны, по крайней мере, уважать документацию для тега Header. Тем не менее, тег «Нижний колонтитул» гораздо более простителен / выполним для всего остального, хотя, если вы убедитесь, что вы развертываете вещи только в DOM ready / async. Но опять же, официально, вы должны следовать документации для обоих, и это мой официальный ответ.

Альтернатива ...

Вам следует подумать о переходе с Adobe DTM на Adobe Launch. Launch - это новейшее решение Adobe для управления тегами. DTM постепенно сокращается. Launch может быть развернут с тегом Header и Footer так же, как DTM, где может быть применена синхронизация, но в отличие от DTM, Launch также имеет официальную опцию асинхронного развертывания. Тег заголовка может быть загружен асинхронно, и тега нижнего колонтитула нет (для асинхронного развертывания). Launch выполняет некоторые фокусы, чтобы обеспечить порядок операций для инструментов Adobe (например, ECIDS против AA, упомянутых выше). В работе также есть поддержка цепочки обещаний для других тегов, развернутых через Launch.

Единственное реальное препятствие - использование Adobe Target. У Target есть версия асинхронной библиотеки, но большинство людей ее избегают, так как это противоречит принципам работы UX. А именно, асинхронный вызовет эффекты «мерцания» при загрузке, поскольку содержимое страницы по умолчанию удаляется, и браузер ожидает ответа для его загрузки. Как правило, это считается плохим UX, который наносит ущерб целостности тестирования AB / MV. Поэтому, если вы используете Target или планируете проводить тестирование AB / MV в целом, вам следует придерживаться обычного развертывания. Но все это отчасти отвлекает от вашего первоначального вопроса.

0 голосов
/ 27 мая 2019

Использование defer (вы можете просто написать defer, без необходимости defer=defer) заставляет браузер извлекать указанные ресурсы по порядку. То, что вы хотите сделать, это поместить сценарии в следующем порядке:

<script src="/js/satellite.js?t=153664965811" defer></script>
<script type="text/javascript" defer>_satellite.pageBottom();</script>

HTML defer

...