Во-первых, JXA не window
как глобальный объект, потому что это не браузер. Вы можете получить доступ к глобальному объекту через верхний уровень this
или, проще говоря, опустить глобальный объект для доступа к глобальным переменным и функциям напрямую.
this.Math.sin(1)
// or
Math.sin(1)
Во-вторых, JXA не имеет поддержки setTimeout
в настоящее время. Это основная причина, по которой вы получили сообщение об ошибке, которое setTimeout
не определено.
Однако вы можете эмулировать setTimeout
с its Objective-C bridge. Это пример реализации setTimeout
с NSTimer
. Обратите внимание, что для работы с NSTimer
в JXA необходимо запустить 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)
Пожалуйста, вы можете разместить свой код? –
Довольно описательное сообщение об ошибке. Таким образом, у вас нет setTimeOut в JXA - возможно, delay() будет работать – mplungjan
Или удалите окно. от него, так как нет окна – mplungjan