D'abord, JXA n'a pas window
que l'objet global car il est pas un navigateur. Vous pouvez accéder à l'objet global via le niveau supérieur this
ou, plus simplement, omettre l'objet global pour accéder directement aux variables et fonctions globales.
this.Math.sin(1)
// or
Math.sin(1)
En second lieu, JXA n'a pas de support pour setTimeout
actuellement. C'est la raison essentielle pour laquelle vous avez l'erreur que setTimeout
est indéfini. Toutefois, vous pouvez émuler setTimeout
avec its Objective-C bridge. Ceci est un exemple d'implémentation de setTimeout
avec NSTimer
. Notez que travailler avec NSTimer
dans JXA nécessite de démarrer manuellement NSRunLoop
.
function timer (repeats, func, delay) {
var args = Array.prototype.slice.call(arguments, 2, -1)
args.unshift(this)
var boundFunc = func.bind.apply(func, args)
var operation = $.NSBlockOperation.blockOperationWithBlock(boundFunc)
var timer = $.NSTimer.timerWithTimeIntervalTargetSelectorUserInfoRepeats(
delay/1000, operation, 'main', null, repeats
)
$.NSRunLoop.currentRunLoop.addTimerForMode(timer, "timer")
return timer
}
function invalidate(timeoutID) {
timeoutID.invalidate
}
var setTimeout = timer.bind(undefined, false)
var setInterval = timer.bind(undefined, true)
var clearTimeout = invalidate
var clearInterval = invalidate
setTimeout(function() {
console.log(123)
}, 1000)
$.NSRunLoop.currentRunLoop.runModeBeforeDate("timer", $.NSDate.distantFuture)
pouvez-vous s'il vous plaît envoyer votre code? –
Message d'erreur assez descriptif. Donc, vous n'avez pas setTimeOut dans JXA - peut-être que delay() fonctionnera – mplungjan
Ou supprimez la fenêtre. de lui puisqu'il n'y a pas de fenêtre – mplungjan