Как открыть новое окно Safari с помощью bash?

Вопрос или проблема

Я работаю над проектом, который позволит мне открывать и закрывать различные заранее сохраненные комбинации URL в разных окнах браузера. Поскольку osascript/AppleScript или как бы их ни называли сейчас, находится на borrowed time, я хотел сделать это с помощью bash или чего-то более долговечного.

Но у меня возникли проблемы с тем, чтобы просто открыть новое окно в Safari. Что я хочу сделать, так это чтобы скрипт открыл новое окно Safari с URL в качестве адреса первой вкладки. Это невозможно сделать с помощью bash? Я пробовал несколько вариантов, и ни один из них не сработал:

Все, что я нашел на данный момент, говорит, что можно открыть окно Safari с помощью open -a Safari, но это просто переключает на уже открытое окно Safari.

Когда я добавляю параметр URL, например open -a Safari https://www.google.com, он переключается на текущее открытое окно Safari и открывает новую вкладку с URL.

Когда я использую флаг -n, например open -n -a Safari https://www.google.com, он обновляет все уже открытые вкладки окна Safari и открывает новую вкладку с URL. Я в замешательстве, почему это не работает, поскольку вот описание в man:

-n, --new             Открыть новый экземпляр приложения, даже если один уже запущен.

Надеюсь, кто-то сможет помочь мне разобраться с этим. Это просто невозможно сделать с помощью bash? Или даже если это возможно, стоит ли это делать с помощью osascript, несмотря на то, что он больше не поддерживается? Я был бы признателен за любую помощь/мысли/направление в другие более подходящие фреймворки для этого.

Если просто использовать команду open, Safari откроет ваш URL в новой вкладке или новом окне, в зависимости от предпочтений конечного пользователя. Вы можете протестировать различные способы работы в Safari, открыв Настройки > Вкладки и поиграв с параметрами открытия страниц во вкладках вместо окон.

AppleScript и osascript являются вашими единственными вариантами для управления тем, открывает ли Safari URL в новых вкладках или новых окнах, и Apple по-прежнему активно их поддерживает. (Я бы не стал верить спекуляциям о том, что AppleScript исчезнет, не имея прочных доказательств, которые могут поступить лишь от Apple.) Это не то, что можно сделать только с помощью bash.

Это откроет новую вкладку в переднем окне Safari с вашим URL или откроет новое окно Safari, если оно не существует:

#!/bin/zsh

/usr/bin/osascript -e 'tell application "Safari" to get front document'

if [[ "$?" -eq 0 ]]; then
    # открыть URL в новой вкладке окна Safari, если оно существует
    /usr/bin/osascript -e 'tell application "Safari" to make new tab with properties {URL: "https://www.apple.com"} at front window'
else
    # открыть URL в новом окне Safari
    /usr/bin/osascript -e 'tell application "Safari" to make new document with properties {URL: "https://www.apple.com"}'
fi

Вы можете использовать вторую команду osascript отдельно, чтобы всегда открывать ваш URL в новом окне Safari.

Вы не хотите использовать open -n, потому что это буквально открывает новое приложение Safari, а не использует то, которое уже запущено. Когда вы это делаете, вы заметите две копии Safari, работающие в вашем док-меню или переключателе приложений.

Ответ или решение

Чтобы открыть новое окно Safari с помощью bash, нельзя обойтись только командами bash, так как для управления приложением Safari требуется использование AppleScript (или osascript). Рассмотрим, как это можно сделать, используя osascript в сочетании с bash.

Для вашей задачи, где нужно открыть новое окно Safari с заданным URL, можно использовать следующий скрипт:

#!/bin/zsh

# Проверяем, запущен ли Safari
/usr/bin/osascript -e 'tell application "Safari" to get front document'

if [[ "$?" -eq 0 ]]; then
    # Если Safari уже запущен, открываем новый таб в текущем окне
    /usr/bin/osascript -e 'tell application "Safari" to make new tab with properties {URL: "https://www.apple.com"} at front window'
else
    # Если Safari не запущен, открываем его с новым окном и заданным URL
    /usr/bin/osascript -e 'tell application "Safari" to make new document with properties {URL: "https://www.apple.com"}'
fi

Пояснение к скрипту:

  1. Проверка запуска Safari:

    • Сначала мы проверяем, запущен ли Safari, с помощью команды osascript -e 'tell application "Safari" to get front document'. Если Safari запущен, код вернёт 0.
  2. Открытие нового таба:

    • Если Safari уже запущен, выполняется команда make new tab, что откроет новый таб с указанным URL в текущем окне Safari.
  3. Открытие нового окна:

    • Если Safari не запущен, используется команда make new document, которая откроет новое окно Safari с заданным URL.

Замечание:

  • Использование флага -n с командой open -a Safari создаёт новое приложение Safari, а не новое окно в текущем приложении. Таким образом, при многократном использовании этой команды может возникнуть несколько экземпляров приложения, что не является желаемым поведением.

  • AppleScript является надёжным методом для автоматизации таких задач в Safari, и на данный момент это всё ещё поддерживаемый способ работы с приложениями macOS. Не стоит бесконечно беспокоиться касательно его «срока службы», пока Apple не сделает официальных заявлений о прекращении его поддержки.

Этот подход даст вам возможность открывать новые окна Safari с выбранными URL-адресами, сохраняя мощь и гибкость bash для ваших остальной логики программирования.

Оцените материал
Добавить комментарий

Капча загружается...