Здравствуйте, rFLY, Вы писали:
bnk>>Я в таких случаях теперь просто звоню Слоу спрашиваю Клода
bnk>>https://claude.ai/share/a7767cfc-30a3-45a0-b197-a9fdcb91d2ea
FLY>FLY>Unfortunately, Claude is only available in certain regions right now.
FLY>PS: На счет ИИ. Когда я гуглил решение этого вопроса, мне в разделе "Обзор от ИИ" были предложены варианты, которые я уже пробовал и написал здесь (т.е. не рабочие). Но это уже тема для отдельного форума.
Извиняюсь, я думал share links работают. Скопировал сюда. По виду вроде норм.
| | вот |
| | Проблема, с которой вы столкнулись, связана с тем, что скрипты, добавленные динамически через `createElement`, выполняются асинхронно, даже при установке `async = false`. Это поведение отличается от статически объявленных скриптов в HTML.
Вот несколько способов решения этой задачи:
## Способ 1: Использование `async = false` с правильным порядком
```javascript
// script1.js
let script2 = document.createElement("script");
script2.src = "script2.js";
script2.async = false; // Важно для сохранения порядка выполнения
// Добавляем скрипт ПЕРЕД script3.js в DOM
let script3 = document.querySelector('script[src="script3.js"]');
document.head.insertBefore(script2, script3);
```
## Способ 2: Удаление и повторная вставка script3.js
```javascript
// script1.js
let script3 = document.querySelector('script[src="script3.js"]');
let script3Parent = script3.parentNode;
// Удаляем script3 из DOM
script3.remove();
// Создаем и добавляем script2
let script2 = document.createElement("script");
script2.src = "script2.js";
script2.async = false;
document.head.appendChild(script2);
// После загрузки script2, добавляем script3 обратно
script2.onload = function() {
let newScript3 = document.createElement("script");
newScript3.src = "script3.js";
newScript3.async = false;
script3Parent.appendChild(newScript3);
};
```
## Способ 3: Загрузка через fetch и eval (не рекомендуется)
```javascript
// script1.js
fetch('script2.js')
.then(response => response.text())
.then(code => {
eval(code); // Выполняем код синхронно
// script2.js уже выполнен, script3.js выполнится следующим
});
```
## Способ 4: Использование модулей (современный подход)
Если возможно изменить архитектуру, рассмотрите использование ES6 модулей:
```html
<!DOCTYPE html>
<html>
<head>
<script type="module" src="script1.js"></script>
</head>
<body>
</body>
</html>
```
```javascript
// script1.js
import './script2.js';
import './script3.js'; // Будет выполнен после script2.js
```
## Рекомендация
Наиболее надежным решением будет **Способ 2**, так как он гарантирует правильный порядок выполнения. Способ 1 может не работать во всех браузерах из-за особенностей обработки динамически добавленных скриптов.
Также стоит отметить, что в вашем HTML есть опечатка: должно быть `src=` вместо `scr=` в тегах script.
|
| | |