Как дождаться загрузки JS на странице?

В языке программирования Go обработка загрузки JavaScript на веб-странице выполняется в рамках HTTP-сервера. В данном ответе я расскажу о двух способах, которые можно использовать для дожидания загрузки JavaScript на странице.

1. Использование события "DOMContentLoaded":
Событие "DOMContentLoaded" срабатывает, когда весь HTML-код на странице полностью загружен и пропарсен, включая встроенный JavaScript. Вы можете использовать библиотеку Gorilla Mux, чтобы создать HTTP-обработчик и зарегистрировать обработчик событий "DOMContentLoaded". Пример кода ниже показывает простую реализацию:

package main

import (
	"fmt"
	"log"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		http.ServeFile(w, r, "index.html")
	})

	http.HandleFunc("/js-loaded", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "JavaScript loaded!")
	})

	log.Fatal(http.ListenAndServe(":8080", nil))
}

В вашем HTML-файле вы можете добавить обработчик события "DOMContentLoaded", который отправит запрос на "/js-loaded" после загрузки JavaScript:

<!DOCTYPE html>
<html>
<head>
	<script>
		document.addEventListener("DOMContentLoaded", function() {
			var xhr = new XMLHttpRequest();
			xhr.open("GET", "/js-loaded", true);
			xhr.send();
		});
	</script>
</head>
<body>
	<h1>Hello, world!</h1>
</body>
</html>

2. Использование события "load":
Событие "load" срабатывает, когда вся страница и все внешние ресурсы, включая JS-файлы, полностью загружены. Для примера мы можем воспользоваться библиотекой gin для создания HTTP-сервера. Вот пример кода:

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	router := gin.Default()

	router.LoadHTMLFiles("index.html")

	// обработчик главной страницы
	router.GET("/", func(c *gin.Context) {
		c.HTML(200, "index.html", nil)
	})

	// обработчик, вызываемый после загрузки JavaScript
	router.GET("/js-loaded", func(c *gin.Context) {
		c.String(200, "JavaScript loaded!")
	})

	router.Run(":8080")
}

А затем в вашем HTML-файле добавьте следующий код:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1>Hello, World!</h1>
    <script>
      window.addEventListener("load", function() {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "/js-loaded", true);
        xhr.send();
      });
    </script>
  </body>
</html>

Оба примера демонстрируют, как можно дождаться полной загрузки JavaScript на веб-странице с использованием Go и соответствующих библиотек. Вы можете выбрать один из них, в зависимости от ваших предпочтений и требований проекта.