JavaScript: impostare un timeout per gli script esterni

JavaScript: impostare un timeout per gli script esterni

Ogni browser ha una tempistica diversa nella gestione dei timeout degli script che richiedono molto tempo per essere caricati. La soluzione a questo problema purtroppo non può essere trovata in JavaScript.

Considerate il seguente codice:


<a class="twitter-timeline" href="https://twitter.com/gabromanato" data-widget-id="297349158094901248">Tweets by @gabromanato</a>
<script>
!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
</script>

Questo widget di Twitter verrà visualizzato solo quando lo script che si trova su http://platform.twitter.com/widgets.js verrà scaricato ed eseguito. Qualora il server remoto non dovesse rispondere velocemente, il caricamento della pagina verrebbe bloccato ed ad al posto del contenuto del widget vi sarebbe uno spazio bianco.

La soluzione non può essere trovata in JavaScript. Dobbiamo procedere lato server:


$ch = curl_init();
$timeout = 5;
$url = 'http://platform.twitter.com/widgets.js';

curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);

$data = curl_exec($ch);

if(curl_errno($ch) == 'CURLE_OPERATION_TIMEDOUT' ) {
	// timeout: visualizza contenuto alternativo
} else {
	// visualizza il codice HTML del widget
}

curl_close($ch);

Il nostro codice non prende in considerazione altri errori HTTP. Per questo motivo potete consultare la documentazione ufficiale.

Torna su