Примечание:
Начиная хотя бы с Firefox v50, вы можете сделать Firefox по умолчанию для открытия URL-адресов в новом окне, сняв отметку Open new windows in a new tab instead
на вкладке General
в настройках Firefox.
Обратите внимание, однако, что этот постоянный параметр влияет на все URL-адреса, открытые извне Firefox.
Приведенное ниже решение может по-прежнему представлять интерес, если вы не хотите полагаться на состояние этого параметра.
(К сожалению, из-за ограниченной поддержки AppleScript в Firefox не существует столь же надежного решения для постоянного открытия на вкладке , независимо от состояния параметра).
Вот более надежное решение, которое:
не зависит от фиксированной задержки и
не зависит от языка (как и при отправке нажатия клавиш); то есть он также работает с локализованными именами для меню и команд (например, «Datei» для «File», ...)
Однако, поскольку сценарии графического интерфейса пользователя используются для программного нажатия на элемент меню, вам необходимо авторизовать вызывающее приложение для вспомогательного доступа сначала (одноразовое действие, которое требует административные привилегии) - например, если ваш скрипт запускается из терминала, вы должны авторизовать Terminal.app
, но даже Script Editor.app
должен быть авторизован, если вы хотите запустить ваш скрипт во время его разработки.
tell application "Firefox"
# Make Firefox frontmost.
activate
# Wait until it is truly frontmost.
repeat while not frontmost
delay 0.1
end repeat
# Open a new window using GUI scripting (requires authorization for assistive access),
tell application "System Events" to tell application process "Firefox"
set windowCountBefore to (count of windows)
# Click on File > New to open a new window, but locate it
# by keyboard shortcut rather than by name, so as to also work
# with localized menu names.
tell menu 1 of menu bar item 3 of menu bar 1
click (first menu item whose value of attribute "AXMenuItemCmdChar" is "N" and value of attribute "AXMenuItemCmdModifiers" is 0)
end tell
# Wait for the new window to appear.
repeat while (count of windows) = windowCountBefore
delay 0.2
end repeat
end tell
# Finally, open the URL.
open location "http://example.org/"
end tell
Примечание:
В нормальных условиях, если Firefox отзывчив, это должно работать надежно. Однако код можно улучшить, реализовав таймауты для циклов ожидания.
Firefox не самый быстрый при открытии нового окна, поэтому Firefox сначала активируется, а новое окно появится только через секунду или около того.
В новом окне всегда будет пустая первая вкладка, а URL откроется на вкладке 2nd .
Примечание о необычно выглядящей конструкции tell application "System Events" to tell application process "Firefox"
:
- Основной блок предназначен для приложения Firefox (
tell application "Firefox"
).
- Тем не менее, сценарии GUI должны выполняться в контексте приложения
System Events
(tell application "System Events"
), и, в этом контексте, именно Firefox процесс должен быть нацелен (tell application process "FireFox"
). Хотя вы можете написать два вложенных tell
блока, они для удобства и краткости объединены в один блок.