La fonction setTimeout
de Javascript est une méthode de l'objet window
. Cet objet n'existe pas dans ExtendScript et n'est donc pas disponible pour les scripts créés pour Adobe InDesign ou Illustrator. Que puis-je utiliser à la place pour obtenir les mêmes résultats?
Réponses
Trop de publicités?Cela fait partie de l'objet $
d'extendscript.
$.sleep(1000) //indique à extendscript de dormir pendant 1000 millisecondes
Différent de setTimeout() mais vous devriez pouvoir le faire fonctionner pour vous.
MODIFICATION : Voici l'extension setTimeout pour extendscript :
$.setTimeout = function(func, time) {
$.sleep(time);
func();
};
$.setTimeout(function () {alert("bonjour tout le monde")}, 3000);
Il existe une implémentation de setTimeout ExtendScript ici (site allemand, avec du code commenté en anglais), mais comme cela dépend de app.idleTasks
, cela fonctionne uniquement dans InDesign (pas dans Photoshop).
Je colle ici le code téléchargeable trouvé dans le lien ci-dessus (© Andreas Imhof) :
/**
* setTimeout
* Version 1.0
* Implémentation de la fonction setTimeout pour InDesign ExtendScript comme on la connaît en Javascript d'un navigateur.
* Utilise les tâches inactives d'InDesign.
* Les millisecondes du délai ne sont pas précises, mais cela permet d'appeler un script lourd,
* de le découper en petits morceaux pour éviter que InDesign ne soit bloqué trop longtemps et ait le temps de respirer.
*
* Le script DOIT s'exécuter dans son moteur cible dédié :
* #target "InDesign"
* #targetengine "myOwnEngineName"
*
* AVERTISSEMENT :
* Aucune garantie - utilisez tel quel ou modifiez mais conservez les coordonnées de l'auteur :
* CopyRight Andreas Imhof, www.aiedv.ch, ai@aiedv.ch
*/
// [...]
En utilisant Adobe After Effects, l'utilisation de $.sleep(temps)
provoquera l'arrêt du script.
Utilisez plutôt le app.scheduleTask(stringToExecute, délai, répéter)
natif dans ExtendScript:
Exemple:
var taskId = app.scheduleTask(function () {alert("bonjour tout le monde")}, 1500, false);
Pour annuler:
app.cancelTask(taskId);