У меня есть кейс на php, где я выполняю тег <script>
Adsense, если userAgent не BOT, но по какой-то причине хочу выполнить его с помощью JS.
Вспомогательная функция:
function detectBottypes() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (!empty($userAgent) and preg_match('~(bot|crawl|google|lighthouse|spider|feedparser|crawler|pinterest)~i', $userAgent)) {
return true;
}
return false;
}
ввиду:
@if ( Request::is('photo/*') && detectBottypes()==false )
<script async src = "https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js" crossorigin = "anonymous">
</script>
@endif
Выше, если запросом является фото/*, а не бот, то он отображается в поле зрения, но я хочу, чтобы он отображался в любом из случаев, но выполнялся только для конкретного случая. У меня есть случай JS
window.onload = function () {
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf('bot') != -1) {
// ******* Execute here ********
}
else {
}
}
Причина, по которой я хочу: я кэширую файл представления, чтобы пропустить нагрузку на сервер, поэтому, если страница сначала сканируется ботом (Google), она кэшируется без описанного выше случая сценария Adsense (объявление не загружается в бот), но поскольку оно кешируется, если позже его просматривает реальный пользователь, отображается кешированная версия без рекламы, чего я не хочу, поэтому предпочел бы быть с JS
@CBroe, видите, я добавил причину в конце. Надеюсь ты понимаешь
Кэш не имеет значения, вы все равно можете добавлять/включать сценарии AdSense в свой (кэшированный) HTML с помощью javascript, когда посетитель не является ботом.
Хорошо, тогда вы хотите, чтобы код, проверяющий UA, выполнялся в любом случае, но чтобы он загружал скрипт Google только при совпадении условия. Затем динамически создайте и добавьте элемент сценария для объявлений Google.
Вы можете динамически загружать скрипт с чем-то вроде:
window.onload = function () {
var agent = navigator.userAgent.toLowerCase();
if (agent.indexOf('bot') != -1) {
var scriptTag = document.createElement('script');
scriptTag.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
scriptTag.async = true;
scriptTag.type = 'text/javascript';
scriptTag.crossorigin = 'anonymous';
document.head.prepend(scriptTag);
} else {
}
}
Это должно заставить браузер загрузить и запустить скрипт. Однако есть более широкий вопрос об использовании вами кэширования. Может быть проще, если вы кэшируете две версии контента и обслуживаете каждую на основе UA, если это возможно.
Что вы подразумеваете под «Я хочу, чтобы он отображался в любом из случаев, но выполнялся только для конкретного случая»? Этот скрипт от Google, по-видимому, не имеет какого-либо конкретного метода инициализации для вызова, поэтому, по-видимому, он выполняет свою работу, как только скрипт загружается. Я думаю, что вы, вероятно, захотите сделать, это динамически создать элемент
script
и добавить его в документ. stackoverflow.com/q/9413737/1427878