Как запустить JavaScript скрипт перед тем, как загрузится сайт?

Как можно изменить порядок загрузки скриптов на странице, чтобы мой скрипт выполнялся перед старым скриптом с <b>src</b>, чтобы избежать проблемы с неработающими кнопками? Вот код, который у меня есть: <br/><br/><pre><code class="javascript">const newScript = document.createElement('script');
const oldScript = document.querySelector('script[src*="/exam/js/main.module_9dae9.js"]');
newScript.src = 'http://127.0.0.1:8000/main.module_9dae9.js';
oldScript.parentNode.insertBefore(newScript, oldScript.nextSibling);
oldScript.parentNode.removeChild(oldScript);</code></pre><br/><br/>Хотелось бы понять, как инжектировать мой скрипт так, чтобы он выполнялся раньше старого скрипта на странице?
  • 10 декабря 2024 г. 15:33
Ответы на вопрос 2
Чтобы запустить ваш JavaScript скрипт перед загрузкой другого скрипта на странице, вы можете использовать метод `insertBefore`, чтобы вставить ваш скрипт перед старым. Также важно то, что если ваш скрипт зависит от других скриптов или выполняет какие-то действия до их загрузки, их нужно загружать асинхронно или использовать `defer`, чтобы минимизировать проблемы с зависимостями.

Вот исправленный код, который вставляет ваш новый скрипт перед старым:

```javascript
const newScript = document.createElement('script');
newScript.src = 'http://127.0.0.1:8000/main.module_9dae9.js';
newScript.async = false;  // Установите false, чтобы убедиться, что ваш скрипт выполняется в порядке загрузки

// Найдите старый скрипт
const oldScript = document.querySelector('script[src*="/exam/js/main.module_9dae9.js"]');

// Если старый скрипт найден
if (oldScript) {
    // Вставляем новый скрипт перед старым
    oldScript.parentNode.insertBefore(newScript, oldScript);
}
```

### Порядок загрузки скриптов:

1. **Асинхронная загрузка (`async`)**: Скрипты с атрибутом `async` загружаются параллельно с остальным контентом страницы. Эти скрипты выполняются сразу после завершения загрузки, что не гарантирует определенный порядок их выполнения.

2. **Отложенная загрузка (`defer`)**: Скрипты с атрибутом `defer` также загружаются параллельно, но выполняются в порядке их появления в документе, после полной загрузки HTML.

### Рекомендации:

- Если ваш скрипт должен выполняться именно перед старым, то вставляйте его перед старым и используйте `async: false`.
- Убедитесь, что ваш новый скрипт не имеет зависимости от старого скрипта. Если у него есть зависимость, порядок загрузки в большинстве случаев имеет значение.

Таким образом, вы сможете контролировать, когда и в каком порядке выполняются ваши скрипты на странице.
Судя по всему, вам сначала нужно блокировать загрузку скрипта /exam/js/main.module_9dae9.js с помощью API webRequest 
https://developer.chrome.com/docs/extensions/refer...
а затем уже добавлять на страницу скрипт 127.0.0.1:8000/main.module_9dae9.js
Похожие вопросы