Диалоговое окно ввода снова появляется, когда оно находится в режиме ожидания в Applescript

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

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

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

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

person maddy2012    schedule 20.01.2012    source источник
comment
Хмммм... Вы пробовали звонить quit, когда хотите закрыть приложение?   -  person fireshadow52    schedule 20.01.2012
comment
Обычный AppleScript будет просто сидеть и ждать ответа из диалогового окна — это в AppleScript Studio или что-то в этом роде? Обработчик простоя на самом деле не подходит для диалога - что вы пытаетесь сделать?   -  person    schedule 20.01.2012
comment
Просто примечание, но вы объявили переменную loginusername глобальной?   -  person fireshadow52    schedule 20.01.2012
comment
@fireshadow52: да, quit работает, когда я хочу закрыть приложение. loginusername объявляется глобальным.   -  person maddy2012    schedule 24.01.2012
comment
@Red_Menace: это не делается в студии AppleScript. Обычный файл сценария, сохраненный как «Оставаться открытым». В основном я позволяю пользователю вводить данные для входа, а затем проверять это с сервера. Если логин неверный, отобразите другое диалоговое окно с сообщением о том, что введенный логин неверен, и закройте приложение.   -  person maddy2012    schedule 24.01.2012
comment
Возможно ли это: Отключение диалогового окна ввода, когда пользователь не отвечает на него и для которого не установлен тайм-аут?   -  person maddy2012    schedule 25.01.2012


Ответы (1)


В обычном 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

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

person Community    schedule 24.01.2012