Диалоговое окно ввода снова появляется, когда оно «на холостом ходу» в Applescript - PullRequest
0 голосов
/ 20 января 2012

У меня есть эта функциональность в моем Applescript, в которой пользователю показано диалоговое окно ввода для ввода некоторого текста.И этот код диалогового окна находится внутри "on idle" "end idle", который повторяется через каждые 3 секунды.

Проблема заключается в том, когда отображается это диалоговое окно, и пользователь не вводит какие-либо данные и оставляет диалоговое окно открытым, чем послеПримерно через минуту это диалоговое окно остается, но появляется другое диалоговое окно (повторяется то же самое).Как мне разрешить эту проблему внутри "on idle" кого-нибудь?

Ниже приведен разрыв кода для справки.

on idle
  try           
    tell application "iTunes"
        repeat

             set loginbutton to display dialog "Enter your facebook log in name to start using XXX." default answer loginusername with title "XXX Log In" buttons {"Quit", "OK"} default button 2
             display dialog "loginbutton = " . loginbutton

             end repeat
             end tell
  end try
  return 3
end idle

1 Ответ

1 голос
/ 24 января 2012

В обычном AppleScript, когда вы открываете диалоговое окно, сценарий будет ждать, пока диалоговое окно не будет закрыто, прежде чем продолжить. Я не могу получить симптомы, которые вы описываете, хотя ваш пример фрагмента неполон и немного глючит - вы находитесь в цикле повторения (навсегда) без возможности выхода, так как вы также перехватываете все ошибки.

Обработчик idle на самом деле не подходит для таких вещей - этот обработчик вызывается, когда ваше приложение, ну, в общем, бездействует, поэтому любой код в нем будет запускаться каждый раз, когда сценарий не выполняется. ничего не делаю.

если вы просто хотите, чтобы диалоговое окно повторялось до тех пор, пока не будет возвращен правильный ответ, вы можете использовать что-то вроде следующего в вашем основном обработчике запуска

repeat -- forever
    display dialog "this is a test, so enter something with \"test\"" default answer "test"
    set theAnswer to text returned of the result
    if theAnswer contains "test" then exit repeat -- success
end repeat
log theAnswer

Обратите внимание, что, хотя кнопка отмены диалогового окна генерирует ошибку «пользователь отменил», в скрипте оставайтесь открытым, сценарий не завершится с ошибкой, поэтому вам нужно будет выполнить свою собственную обработку ошибок.

...