Gelöst Manipulation des DOM nach dem es vollständig geladen wurde (jQuery Plugin Initialisierung)

OmKFJ

Aktives Mitglied
2. August 2016
22
0
Hi,

mein selbstentwickeltes jQuery Plugin include ich mittels der info.xml Datei:

XML:
<JS>
    <file>
        <name>foo.js</name>
        <priority>10</priority>
        <position>body</position>
    </file>
</JS>

Ich benutze den HOOK 140 "HOOK_SMARTY_OUTPUTFILTER" um mittels den phpQuery eine zusätzliche JS-Datei aufzurufen/einzubinden um das jQuery Plugin zu initialisieren:

PHP:
pq("footer")->append("<script src=\"" . $oPlugin->cFrontendPfadURL . "template/init.js" . "\"></script>");

JavaScript:
$( "#content" ).foobarPlugin( {
    value: "foo"
} );

Das Problem dabei ist, dass die initialisierung vor dem jQuery include passiert, was darauf hin die Console mir den Fehler ausgibt:
Uncaught TypeError: $(...).foobarPlugin is not a function

Wie regelt man sowas?
 

NETZdinge.de

Sehr aktives Mitglied
7. April 2010
2.611
401
Das Problem ist, dass die ganzen Skripte selbst erst im footer gesetzt werden... wahrscheinlich bist du da einfach schneller… Versuche es mal mit einen Window.Timeout von 200ms
 

OmKFJ

Aktives Mitglied
2. August 2016
22
0
Das Problem ist, dass die ganzen Skripte selbst erst im footer gesetzt werden... wahrscheinlich bist du da einfach schneller… Versuche es mal mit einen Window.Timeout von 200ms
Hi, danke für die Antwort.
Ein timeout würde das Problem lösen, jedoch ist das meiner Meinung nach ein workaround und etwas was sehr unpräzise ist. Beispielweise wenn die Seite unter Mobile länger braucht um zu laden, würde es ja nicht mehr funktionieren. Es gibt auch andere Gründe, die gegen ein timeout sind. Eine andere Möglichkeit?
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.881
529
Halle
Die Scripte aus der info.xml werden nicht im footer, sondern ganz am Ende des body geladen. Mit einem
PHP:
pq('body')->append('<script>jtl.load(["' . $oPlugin->cFrontendPfadURL . 'template/init.js' . '"]);</script>');
sollte es also auch funktionieren, wenn dein Plugin über die info.xml eingebunden wird.
 
  • Gefällt mir
Reaktionen: OmKFJ