Jak załadować pliki synchronicznie przez JavaScript?

Odpowiedz Nowy wątek
2020-03-23 19:23

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

0

Mam taką sytuację. Jest sobie pewna strona, do kodu której nie mam dostępu. Jedyne co mogę zrobić to dodać do niej jeden skrypt js'owy w head. Dla uproszczenia załóżmy, że wygląda to tak.

<html>
    <head>
                ...
        <script src="external-site-url"></script>
    </head>
    <body>
        ...
    </body>
</html>

Mój skrypt będzie pobierany z innej domeny niż działa strona. Skrypt ten musi pobrać jeden plik css, jeden js i opcjonalnie jQuery jeżeli nie ma.
Jak mogę zrobić coś takiego, tak aby w trakcie wykonywania tego skryptu (tzn w trakcie pobierania tych plików z poziomu skryptu) HTML przestał być parsowany? To znaczy chcę osiągnąć sytuację taką, że mam zapewnione, że wszystko zostanie pobrane przed eventem document ready.

Udało mi się to zrobić tylko przez XMLHttpRequest i flagę "false" w parametrze, która mówi o tym, że request jest synchroniczny i działa to wtedy dobrze, ale niestety nie podoba mi się warning w konsoli, który mówi, że to jest deprecated.

Po co coś takiego chce robić? Skrypt ma na celu modyfikację domyślnego scrollbara na stronie i jeżeli css'y i js'y pobierają się async to bardzo często ich pobieranie kończy się już po document ready. A więc user przez chwilę widzi domyślny scrollbar i nie jest to pożądane :) A niestety nie mogę nic więcej zmieniać w kodzie strony, poza dodaniem takiego skryptu w dowolnym miejscu w head.

Pozostało 580 znaków

2020-03-23 19:46

Rejestracja: 2 lata temu

Ostatnio: 59 sekund temu

0

Zacznę od tego, że: ale dlaczego właściwie chcesz psuć ludziom ich domyślny interfejs?
Po to do CSS nie wrpowadzono MS-owych wynalazków stylujących scrollbary, żeby webmasterzy tego nie robili. A i tak starają się (niestety) robić.

Jeśli jedyne, co możesz zrobić na tamtej stronie, to umieścić w nagłówku odwołanie do swojego JS, to raczej niczego nie wymodzisz.
Jeśli możesz tam wcisnąć również jakiś css, to mógłbyś spróbować czegoś w stylu:

<style>
BODY {display:none;}
</style>

A później w swoim skrypcie to odkręcić, jak już załadujesz swoje zewnętrzne CSS-y.

Ew. spróbować dodać dwa skrypty JS, gdzie pierwszy ma:
.src = "data:image/png;base64,(tu zakodowany skrypt)
i generuje w locie potrzebny CSS.


Pozostało 580 znaków

2020-03-23 19:56

Rejestracja: 6 lat temu

Ostatnio: 3 godziny temu

0
ale dlaczego właściwie chcesz psuć ludziom ich domyślny interfejs?

Psuć to trochę złe słowo ;) Ten skrypt to taka jakby "wtyczka" do cms'a. Ktoś może sobie takie cudo doinstalować albo nie.

Pomysł z display: none jest całkiem niezły i raczej wykonalny. ;) Być może to będzie rozwiązanie.

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0