Jump to content
  • 0

Ładowanie generowanych skryptów javascript z async="async"


hakeryk2

Question

Mam dosyć specyficzne pytanie. Otóż chcę ładować skrypty asynchronicznie więc potrzebuje dodać async="async" w <script src=""></script> no i wszystko byłoby spoko gdybym nie korzystał z CCC dla plików JS czyli presta zbiera wszystkie pliki javascript i łączy je w jeden duży, zminimalizowany np v_235_a8347981273902.js.

 

Początkowo myślałem, że jak sobie dodam np w footer sam jakiś plik z najbardziej kluczowymi funkcjami to będę go mógł załadować asynchronicznie (chociaż ten jeden) ale nawet jeśli w footer.tpl 
 

<script async="async" defer type="text/javascript" src="fastjs.js?ver=1.42"></script>

to i tak w wygenerowanym HTML mam obciętą wartość async ze względu na to, że mam włączoną funkcję "Przenieś JavaScript na koniec".  Wyłączona opcja zostawia async w spokoju, jednak robi miszmasz w kodzie i JS nie jest ładowany na końcu na czym mi zależy.

 

Sprawdziłem pliki minify_html.class.php, HTMLPurifier.standalone i Media.php i wydaje mi się, że to będę gdzieś tam, ale wszystkie moje próby edycji spełzły na niczym. Może ktoś wie jak ogarnąć by presta tego nie czyściła na końcu?

EDIT:

Ok, odkryłem, że istnieje atrybut data-keepinline="true" który dodany do <script> w plikach tpl spowoduje, że plik nie zostanie ujęty w przesunięciu na sam dół i zostawi wszystkie atrybuty w spokoju. Co jednak nie do końca rozwiązuje mój problem, ponieważ chciałbym również async dla generowanego pliku JS.

Edited by hakeryk2 (see edit history)
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Może to rozwiąże Twój problem:
w Media.php w funkcji  deferInlineScripts() pod koniec, jest warunek:
 

if (!in_array($src, Media::$inline_script_src) && !$script->getAttribute(Media::$pattern_keepinline)) {
    Context::getContext()->controller->addJS($src);
}

zamień na:
 

if (!in_array($src, Media::$inline_script_src) && !$script->getAttribute(Media::$pattern_keepinline) && !$script->getAttribute('async')) {
    Context::getContext()->controller->addJS($src);
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...