jQuery: intercettare gli errori nei plugin: le opzioni

Scrivere un plugin per jQuery significa anche diffidare dei suoi utenti finali. Non basta specificare delle opzioni predefinite: serve anche verificare che il tipo di dati usato sia corretto. In altre parole, occorre intercettare gli errori prima che questi accadano.

Supponiamo di avere un plugin che esegue un'animazione complessa e al termine dell'animazione lancia una funzione di callback:


(function($) {
	$.fn.plugin = function(options) {
		var defaults = {
			speed: 2000,
			callback: function() {}
		};
		
		options = $.extend(defaults, options);
		
		var run = function(element) {
			// animazione
		};
		
		return this.each(function() {
			var $element = $(this);
			
			$.when(run($element)).done(options.callback());
		});
	};
})(jQuery);

Il codice funziona se e solo se le due opzioni sono del tipo specificato, ossia un valore valido per la velocità (un numero intero o una delle parole chiave supportate da jQuery) e una funzione per il callback.

Il primo approccio è puramente condizionale:


if(typeof options.callback !== 'function') {
	console.warn(options.callback + ' is not a function');
	return;
}

In questo caso abbiamo inviato un warning alla console JavaScript e abbiamo immediatamente interrotto l'esecuzione del resto del codice. Ciò significa che gli altri script continueranno a funzionare e che semplicemente l'animazione non avrà luogo.

Questo tipo di verifica avviene prima che le opzioni vengano usate. Il secondo approccio avviene invece quando le opzioni vengono richiamate dal codice:


try {
	$.when(run($element)).done(options.callback());
} catch(e) {
	console.log(e.message);
}

Anche in questo caso abbiamo intercettato l'errore, ma a posteriori ossia dopo che il codice potenzialmente errato è stato eseguito. Il risultato nei browser è lo stesso: l'errore non bloccherà gli altri script.

Torna su