Eseguire JavaScript dopo il load in SharePoint
SharePoint 2010 metteva a disposizione il metodo ExecuteOrDelayUntilScriptLoaded per eseguire del codice JavaScript solo dopo il caricamento di una specifica libreria, ad esempio:
nel caso in cui doveva essere utilizzato con JQuery andava incluso nel metodo ready:
Tutto bene quindi?
Si ma solo 2010. Sulle versioni successive il metodo non è più disponibile ed è stato sostituito da SP.SOD.executeFunc:
Quindi come fare per essere pronti a migrare ad una versione successiva?
L'ideale è sostituire tutti i metodi ExecuteOrDelayUntilScriptLoaded con una funzione equivalente che si adatti alla versione di SharePoint prima della migrazione, in modo da avere il codice funzionante su 2010 e pronto a funzionare anche sulle versioni successive.
In questo caso ci viene in aiuto la proprietà JavaScript _spPageContextInfo.webUIVersion presente sia su 2010, 2013 e 2016:
JavaScript
ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");
function miaFunzione() {
...
}
JavaScript
$(document).ready(function () {
ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");
});
function miaFunzione() {
...
}
Si ma solo 2010. Sulle versioni successive il metodo non è più disponibile ed è stato sostituito da SP.SOD.executeFunc:
JavaScript
SP.SOD.executeFunc("sp.js", "SP.ClientContext", miaFunzione);
function miaFunzione() {
...
}
L'ideale è sostituire tutti i metodi ExecuteOrDelayUntilScriptLoaded con una funzione equivalente che si adatti alla versione di SharePoint prima della migrazione, in modo da avere il codice funzionante su 2010 e pronto a funzionare anche sulle versioni successive.
In questo caso ci viene in aiuto la proprietà JavaScript _spPageContextInfo.webUIVersion presente sia su 2010, 2013 e 2016:
JavaScript
(document).ready(function () {
if(_spPageContextInfo.webUIVersion === 4) { // verifico la versione di SharePoint
// 4 = sono su SharePoint 2010
ExecuteOrDelayUntilScriptLoaded(miaFunzione, "sp.js");
} else {
// sono su versioni successive
SP.SOD.executeFunc("sp.js", "SP.ClientContext", miaFunzione);
}
});
Lo script parte da presupposto che si usi una versione 2010 o successiva, non prende in considerazione le versioni precedenti.