Улучшите яблочный скрипт, чтобы открыть новое приватное окно с Safari

1

Я сделал этот AppleScript для использования со скриптом. Его можно сохранить как приложение для запуска одним щелчком мыши. Я должен утвердить заявку, хотя в инструменте редактирования безопасности.

Это откроет приватный браузер, нажав пункты меню. Затем он закрывает первое окно, ища немыслимый URL в меню «Окно». Это работает, но бросается в глаза, поскольку окна открываются и закрываются.

Я бы хотел, чтобы его можно было каким-то образом улучшить, чтобы он позволял щелкать ярлык, а затем видеть, что в закрытом режиме запускается только окно Safari без такого «макро», как внешний вид. Можете ли вы помочь улучшить это для меня?

# Start or bring forward Safari window
tell application "Safari"
    activate
end tell

# Open a URL that cannot be found
set theURL to "http://localhost:38"
tell application "System Events"
    tell process "Safari"
        open location theURL
    end tell
end tell

# Launch a new private window
tell application "System Events"
    tell process "Safari"
        tell menu bar 1
            click menu bar item "File"
            tell menu "File"
                click menu item "New Private Window"
            end tell
        end tell
    end tell
end tell

# Close the first launcher window
tell application "System Events"
    tell process "Safari"
        tell menu bar 1
            click menu bar item "Window"
            tell menu "Window"
                click menu item "Failed to open page"
            end tell
        end tell
        tell menu bar 1
            click menu bar item "File"
            tell menu "File"
                click menu item "Close Window"
            end tell
        end tell
    end tell
end tell
ndasusers
источник
Почему сначала нужно открыть нежелательное место?
Tetsujin
@ Tetsujin, я предполагаю, потому что он / она кодирует его так, как будто Safari закрывается, и он, конечно, открывает окно при его открытии и, вероятно, хочет, чтобы это окно открылось. Устанавливая его в местоположение, которое будет предсказуемо производить «Ошибка открытия страницы», он / она, вероятно, чувствует, что это безопасный способ закрыть это окно. Во всяком случае, я отредактировал свой ответ, чтобы показать, как я справлюсь с этим. Если вы видите, где это может сделать это лучше / иначе, пожалуйста, прокомментируйте, спасибо.
user3439894
@ user3439894 - нет, я думаю, что вы хорошо это рассмотрели, тем более с редактированием.
Tetsujin
ndasusers, я не знаю, видели ли вы мой ответ, однако я недавно изменил блок код Я бы выбрал, чтобы выполнить то, что, по моему мнению, вы пытаетесь достичь с помощью код так что вы должны еще раз взглянуть на мой ответ.
user3439894

Ответы:

2

Попробуйте следующее:

tell application "Safari"
    activate
    delay 0.5
end tell
tell application "System Events"
    open location "http://localhost:38"
    delay 0.5
    keystroke "w" using command down
    keystroke "n" using {shift down, command down}
end tell

Теперь вот код Я бы предпочел использовать для проверки, открыт ли Safari, и если да, просто открывает новое личное окно. Если нет, то это работает так, как я полагаю, вы намеревались: закрыть открывающееся окно, а затем открыть новое личное окно.

on is_running(appName)
    tell application "System Events" to (name of processes) contains appName
end is_running

set isRunning to is_running("Safari")

if isRunning then
    tell application "Safari" to activate
    delay 0.5
    tell application "System Events" to keystroke "n" using {shift down, command down}
else
    tell application "Safari" to activate
    delay 1
    tell application "System Events"
        keystroke "w" using command down
        keystroke "n" using {shift down, command down}
    end tell
end if
  • Замечания: Значение delay возможно, потребуется скорректировать скорость вашей системы. Как закодированы текущие значения delay отлично работает в моей системе. Значение в секунд или его фракции в виде десятичный значение.

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


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

tell application "Safari"
    activate
end tell
tell application "System Events"
    open location "http://localhost:38"
    click menu item "New Private Window" of menu "File" of menu bar 1 of process "Safari"
    click menu item "Failed to open page" of menu "Window" of menu bar 1 of process "Safari"
    click menu item "Close Window" of menu "File" of menu bar 1 of process "Safari"
end tell

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

В конце концов, я бы выбрал второй блок код показано в этом ответе.

user3439894
источник
0

Моя проблема с @ user3439894 Ответ выше заключается в том, что если Safari сначала открывается в другом пространстве, то вы можете переключиться на него и открыть новое окно там, а не в текущем пространстве. Поэтому я использую:

tell application "Safari"
    make new document
    activate
end tell
tell application "System Events"
    keystroke "n" using {shift down, command down}
    keystroke "`" using {command down}
    keystroke "w" using command down
end tell

Который я считаю, работает хорошо, хотя может быть немного медленнее.

daphtdazz
источник