Jak wiadomo, w HTML można napisać skrypt na dwa sposoby:
<!-- Bezpośrednio -->
<script type="text/javascript">alert("hello world");<script>
<!-- Posrednio, z pliku -->
<script type="text/javascript" src="hello.js"><script>
Przez całe życie byłem przekonany, że to jest dokładnie to samo, nie ma żadnej różnicy, ale właśnie niedawno znalazłem przypadek, w którym to nie jest to samo. Ostatnio bawię się Emscripten i w przypadku programów z Worker i Thread stwierdziłem, że w przypadku wklejenia skryptu do pliku HTML, program przestaje działać. Na forum Emscripten założyłem temat, w którym w ostatniej wiadomości napisałem "jak krowie na rowie", co trzeba zrobić, żeby samemu się o tym przekonać: https://github.com/emscripten-core/emscripten/issues/20567
Przekształcanie na pliki PHP, dopisywanie odpowiednich nagłówków jest po to, żeby przeglądarka miała obiekt SharedArrayBuffer
, bez tego, żaden program z wątkami w WASM nie będzie działać. Modyfikacja nie byłaby potrzebna, gdybym dysponował serwerem, który dodaje Cross-Origin-Embedder-Policy: require-corp
i Cross-Origin-Opener-Policy: same-origin
do każdej odpowiedni na żądanie GET lub POST. Nagłówek Content-Type: text/javascript
jest po to, żeby przeglądarka zinterpretowała dany plik jako JavaScript pomimo innego rozszerzenia.
Co w ogóle zmienia wklejenie skryptu do pliku HTML, że coś działa inaczej? Jaki muszą być spełnione warunki, żeby wklejenie skryptu do HTML zupełnie nic, a nic nie zmieniło w interpretacji plików przez przeglądarkę? Jaka jest tak naprawdę różnica pomiędzy JavaScript w HTML a JavaScript w osobnym pliku?