Как выполнить действие до того, как будет загружено событие DomContentLoaded?

Мне нужно проиндексировать сайт Яндексом без использования серверного рендеринга (SSR). Согласно <a href="https://yandex.ru/support/webmaster/yandex-indexing/rendering.html?lang=ru#rendering__spec" rel="nofollow">документации Яндекса</a>, я должен создать объект <br/> <pre><code class="javascript">window.YandexRotorSettings = {
        WaiterEnabled: true;
        FailOnTimeout: false;
        NoJsRedirectsToMain:true
    }</code></pre> <br/> перед событием DomContentLoaded. <br/> <br/> Если я использую <a href="https://vueframework.com/docs/v3/ru/ru/api/options-lifecycle-hooks.html#beforecreate" rel="nofollow">хук beforeCreate</a>, произойдет ли это до указанного события?
  • 30 октября 2024 г. 17:02
Ответы на вопрос 2
Чтобы выполнить действие до того, как произойдёт событие `DOMContentLoaded`, вам нужно разместить ваш скрипт в `<head>` вашего HTML-документа, либо использовать атрибут `defer` или `async` при подключении внешнего скрипта. 

Если вы хотите использовать `window.YandexRotorSettings` до `DOMContentLoaded`, вы можете сделать это следующим образом:

1. Поместите ваш код непосредственно в `<head>` секции HTML:
   ```html
   <script>
       window.YandexRotorSettings = {
           WaiterEnabled: true,
           FailOnTimeout: false,
           NoJsRedirectsToMain: true
       };
   </script>
   <script src="ваш-скрипт.js" defer></script>
   ```

2. Если вы используете Vue.js и хотите воспользоваться хуками, к сожалению, хук `beforeCreate` Vue-компонента не выполнится до события `DOMContentLoaded`, так как Vue инициализируется внутри `DOMContentLoaded` или позже. Поэтому этот метод не подойдёт для вашей задачи.

Вместо этого предпочтительным методом будет добавление вашего кода в `<head>` или создание отдельного скрипта, который будет выполняться в самом начале, чтобы гарантировать, что объект `window.YandexRotorSettings` будет доступен до момента, когда страница начнёт загружать свои основные ресурсы.
Нет. (с оговорками, но не в твоём случае) 

Просто измени шаблон index.template.html и добавь туда в head тупо
<script>
window.YandexRotorSettings = {
        WaiterEnabled: true;
        FailOnTimeout: false;
        NoJsRedirectsToMain:true
}
</script>

(ну либо любой иной шаблон в который ты подключаешь vue)
Похожие вопросы