Bei mir wird in Sharepoint 2016 eine Javascript-Function direkt aus der Masterpage heraus ausgerufen. Durch MDS und andere Dinge wird diese Funktion bei einem „Strg“+“F5“ reload dadurch bis zu 3x aufgerufen. Um das zu verhindern gibt es die Singleton-Pattern. Dis sollte so aussehen:
function MySingletonClass () {
if (arguments.callee._singletonInstance) {
return arguments.callee._singletonInstance;
}
arguments.callee._singletonInstance = this;
this.Foo = function () {
// ...
};
}
var a = new MySingletonClass();
var b = MySingletonClass();
console.log( a === b ); // prints: true
Da das bei mir so nicht korrekt funktioniert hat (vermutlich habe ich den richtigen Aufruf einfach nicht hinbekommen, habe ich das so abgewandelt:
// My simple "singleton Pattern"
var sp2016InitFirstRun = true;
// This function is called from at the bottom of my masterpage!!
function $_global_sp2016_js_init() {
// My simple "singleton Pattern"
if (!sp2016InitFirstRun)
{
return;
}
else
{
sp2016InitFirstRun = false;
};
// The following code is only run once!!
...
};
$_global_sp2016_js_init()
Funktioniert wie gewünscht: Der Code wird nur 1x gestartet. Egal wie oft Sharepoint die Function aufruft 😉
Quelle: stackexchange.com