Как вывести приложение на передний план в зависимости от некоторого условия (OS X) с помощью AppleScript

Как вывести приложение на передний план в зависимости от некоторого условия (OS X) с помощью AppleScript

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

Мне нужно, чтобы несколько приложений были открыты с веб-страницей на заднем плане, которая отслеживает некоторые видеокамеры. Когда видеокамера обнаруживает движение, мне нужно, чтобы окно веб-браузера выходило на передний план, чтобы оно было видно вместо используемого приложения.

Я думал о чем-то похожем на то, что пытался сделать этот парень:Как выводить приложение на передний план каждые 15 минут в Mac OS X Lion?

Я думал об использовании AppleScript для работы в непрерывном цикле и раз в секунду проверять открытую страницу в Safari, сканировать на предмет каких-либо изменений, а затем отправлять команду «activate» в Safari, чтобы вывести ее на передний план. Так ли это, или есть лучший способ?

решение1

Я бы, наверное, просто использовал launchd или cron вместо запуска скрипта в фоновом режиме.

  1. Сохраните такой скрипт где-нибудь в редакторе AppleScript:

    try
        tell application "Safari"
            tell document 1 where name starts with "Webcam" to do JavaScript "--"
            if result is "--" then activate
        end tell
    end
    
  2. Сохраните список объектов недвижимости, как этот~/Library/LaunchAgents/com.superuser.443513.plist

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
    "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.superuser.443513</string>
        <key>ProgramArguments</key>
        <array>
            <string>osascript</string>
            <string>/Users/username/Library/Scripts/script.scpt</string>
        </array>
        <key>StartInterval</key>
        <integer>5</integer> <!-- every 5 seconds -->
    </dict>
    </plist>
    
  3. launchctl load ~/Library/LaunchAgents/com.superuser.443513.plist


Можете ли вы просто использовать curl для проверки состояния? Вы можете запускать его каждую минуту, отредактировав crontab EDITOR=nano crontab -eи добавив строку вроде этой:

*/2 * * * * [[ -n "$(curl -L http://superuser.com/questions/443513 | grep automate)" ]] && open http://example.com

Связанный контент