#javascript #reactjs #next.js #cross-domain #affiliate
Вопрос:
При работе с крупными партнерскими сетями они часто требуют, чтобы вы загружали пользовательские сценарии (через теги сценариев, поскольку у них на самом деле нет импорта / и т. Д.), Которые используются для подтверждения владения сайтом и/или помощи в отслеживании ссылок.
Примеры этого:
<script type="text/javascript" src="https://classic.avantlink.com/affiliate_app_confirm.php?mode=jsamp;authResponse=631a7acab11q3h5bq34y1brb23G966fd3208dcc2178c08634984c4a4"></script>
<script type="text/javascript" src="https://s.skimresources.com/js/195290X1q3456hern33yasbf672977.skimlinks.js"></script>
К сожалению, они указывают теги / комментарии сценариев, которые должны быть добавлены в конец тела (вне иерархии DOM react). Я немного боролся с поиском лучшего способа сделать это… в настоящее время я добиваюсь этого следующим:
// On load
useEffect(()=> {
// Load external scripts and show comments (for affiliates)
if (staticProfile.profilePageScripts) {
try {
const scripts = JSON.parse(staticProfile.profilePageScripts);
console.log(scripts);
scripts.forEach((script: any) => {
console.log(script);
const scriptTag = document.createElement("script");
if (script.src) scriptTag.src = script.src;
if (script.async) scriptTag.async = script.async;
if (script.integrity) scriptTag.integrity = script.integrity;
if (script.crossOrigin) scriptTag.crossOrigin = script.crossOrigin;
document.body.appendChild(scriptTag);
});
} catch (err) {
console.log(err);
}
}
if (staticProfile.profilePageComments) {
const comments = document.createComment(staticProfile.profilePageComments);
document.body.appendChild(comments);
}
},[]);
Интересно, есть ли лучший способ сделать это?
В идеале я хотел бы сохранить исходный HTML-код в базе данных и просто отобразить его в конце, но я не нашел простого способа сделать это? Я взглянул на порталы react, но они кажутся немного тяжеловатыми только для этого?
У меня также есть проблемы с браузером, который неправильно загружает их сценарии (я получаю предупреждения CORB?) в некоторых ситуациях. Я не уверен, что это что-то не так с моей стороны или с их стороны?