Mittwoch, 25. Juli 2018

ExecuteOrDelayUntilScriptLoaded oder doch lieber ExecuteFunc?

Ich falle immer wieder über den Unterschied zwischen ExecuteOrDelayUntilScriptLoaded und ExecuteFunc.
ExecuteOrDelayUntilScriptLoaded führt einen callback aus, sobald eine abhängige Datei geladen ist. Allerdings führt dies nicht dazu, dass die abhängige Datei geladen wird.

Der code:

SP.SOD.executeOrDelayUntilScriptLoaded(function(){
    alert('Hallo, Welt.');
}, 'sp.js');

öffnet also den alert nur, wenn die sp.js benötigt und geladen wurde. Wenn die sp.js nie geladen wird, wird der alert nie erscheinen.

ExecuteFunc hingegen führt einen callback aus, nachdem eine abhängige Datei geladen ist. Die abhängige Datei wird dabei geladen, wenn sie nicht schon geladen war. Dies führt dazu, dass der callback nicht ausgeführt wenn die Datei vorher schon geladen war.

Der code:

SP.SOD.executeFunc('sp.js', null, function() {
    alert('Hallo, Welt!');
});

öffnet also den alert nur, wenn die sp.js vorher noch nicht geladen war..

Es bleibt die Frage: Wie stelle ich jetzt also sicher, dass mein code "nach" der sp.js aufgerufen wird und gleichzeitig, dass die sp.js auf jeden Fall geladen wird?

ExecuteOrDelayUntilSciptLoaded liefert einen bool zurück, der angibt ob die abhängige Datei schon angefordert war. D.h. falls ExecuteOrDelayUntilScriptLoaded false liefert sind wir im "delay"-Teil  der Funktion gelandet und warten darauf, dass die abhängige Datei geladen wird...

Der Code:

if(!SP.SOD.executeOrDelayUntilScriptLoaded(function(){
    alert('Hallo, Welt.');
}, 'sp.js')) {
    // sp.js war nocht nicht angefordert...
    SP.SOD.executeFunc('sp.js', null, function(){});
}

wird den alert öffnen, wenn die sp.js geladen ist und gleichzeitig die sp.js anfordern, falls diese bisher noch nicht angefordert war.

Keine Kommentare:

Kommentar veröffentlichen