Выполнение тега Script с использованием JS вместо PHP

У меня есть кейс на 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

Что вы подразумеваете под «Я хочу, чтобы он отображался в любом из случаев, но выполнялся только для конкретного случая»? Этот скрипт от Google, по-видимому, не имеет какого-либо конкретного метода инициализации для вызова, поэтому, по-видимому, он выполняет свою работу, как только скрипт загружается. Я думаю, что вы, вероятно, захотите сделать, это динамически создать элемент script и добавить его в документ. stackoverflow.com/q/9413737/1427878

CBroe 10.02.2023 07:57

@CBroe, видите, я добавил причину в конце. Надеюсь ты понимаешь

Anonymous Girl 10.02.2023 07:59

Кэш не имеет значения, вы все равно можете добавлять/включать сценарии AdSense в свой (кэшированный) HTML с помощью javascript, когда посетитель не является ботом.

DarkBee 10.02.2023 08:01

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

CBroe 10.02.2023 08:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
4
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете динамически загружать скрипт с чем-то вроде:

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, если это возможно.

Другие вопросы по теме