Ebay EPN: ошибка карты источников

Программа партнерства eBay предоставляет скрипт, который преобразует ссылки на стороне клиента. Это простая двухстрочная конструкция:

<script>window._epn = {campaign: [XXX_ID_XXX], smartPopover:false};</script>
<script src="https://epnt.ebay.com/static/epn-smart-tools.js"></script>

Я понимаю, что не могу просто добавить эти две строки по соображениям безопасности. Обсуждение этой темы можно найти здесь: EPN Smart Links

Я создал очень простой компонент темы и разместил код в файле common/head_tag.html:

Идентификатор указан на странице компонента, и в консоли выводится правильный ID. Однако, похоже, что ни один URL не обновляется.

Я добавил этот epn-smart-tools.js как исключение в политике безопасности контента (CSP). Однако в консоли браузера я получаю следующее предупреждение:
image

Похоже, что проблема заключается в файле “from-url.js.map”, на который ссылается epn-smart-tools.js. Я создал простой HTML-файл на своем рабочем столе и запустил его локально, и там проблем не возникло — это заставляет меня думать, что проблема скорее на стороне Discourse, а не в моем браузере.

Что делают эти карты исходного кода и как Discourse взаимодействует с ними — выходит за рамки моих знаний. Есть ли какие-либо советы? Не упускаю ли я что-то?

Исходные карты — это необязательные файлы, которые помогают в отладке минифицированных ресурсов. Поскольку вы не контролируете этот ресурс и не имеете контроля над его исходным кодом, вы должны игнорировать это предупреждение.

Спасибо за информацию, @Falco, и с днём рождения.

Я понял, что проблема была в том месте, где я добавил строку <script src=“…”.

У меня сработало следующее:

<script type="text/discourse-plugin" version="0.8">

  console.log(settings.epn_id);
  window._epn = {campaign: settings.epn_id, smartPopover:false};

  var script = document.createElement('script');
  script.src = 'https://epnt.ebay.com/static/epn-smart-tools.js';
  var head = document.getElementsByTagName("head")[0];
  head.appendChild(script);

</script>

Следующая проблема, с которой я столкнулся, заключается в том, что к элементам, загружаемым динамически, скрипт не применяется. Например, если обновить страницу на теме, посты, которые загрузятся, будут содержать партнёрскую ссылку, но при прокрутке для отображения новых постов — у тех её не будет.

Есть ли способ запускать скрипт каждый раз при загрузке нового элемента?

В идеале это следует делать на стороне сервера сразу после сохранения нового сообщения. У нас есть плагин, который делает именно это для Amazon, поэтому вы сможете адаптировать его для eBay: GitHub - discourse/discourse-affiliate · GitHub

Если вы всё же хотите реализовать это на стороне клиента, вы можете следовать этому полезному руководству: Link rewriting for affiliate codes - #8 by Johani