Hinweis:
Ab mindestens Firefox v50 können Sie Firefox Standard zu öffnen URLs in einem neuen Fenster machen, indem Open new windows in a new tab instead
auf der General
Registerkarte Firefox-Einstellungen deaktivieren.
Beachten Sie jedoch, dass dies eine dauerhafte Einstellung ist, die sich auf alle URLs auswirkt, die von außerhalb von Firefox geöffnet wurden.
Die folgende Lösung kann immer noch von Interesse sein, wenn Sie sich nicht auf den Status dieser Einstellung verlassen möchten.
(Leider gibt es aufgrund der eingeschränkten AppleScript-Unterstützung von Firefox keine ähnlich robuste Lösung für das Öffnen immer in einem Tab, unabhängig von dem Zustand der Einstellung).
Hier ist eine robustere Lösung, die:
nicht auf einer festen Verzögerung verlassen und
ist sprachneutral (wie der Tastenanschlag-Senden Ansatz ist); dh es funktioniert auch mit lokalisierten Namen für die Menüs und Befehle (zB „Datei“ für „Datei“, ...)
Da jedoch GUI-Scripting für programmatisch Klick auf einen Menüpunkt verwendet wird, Sie müssen authorize the calling applicationfor assistive access first (eine einmalige Aktion, die Administratorrechte erfordert) - z. B. wenn Ihr Skript von einem Terminal ausgeführt wird, müssen Sie Terminal.app
autorisieren, aber auch Script Editor.app
muss autorisiert werden, wenn Sie Ihr Skript während der Entwicklung ausführen möchten.
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
Hinweis:
Unter normalen Umständen, wenn Firefox reagiert, sollte diese zuverlässig arbeiten. Der Code könnte jedoch verbessert werden, indem Timeouts für die Warteschleifen implementiert werden.
Firefox ist nicht das schnellste beim Öffnen des neuen Fensters, also wird Firefox zuerst aktiviert, und das neue Fenster wird nur ungefähr eine Sekunde später erscheinen.
Das neue Fenster hat immer eine leere erste Registerkarte, und die URL wird im Register 2nd geöffnet.
Randnotiz re die ungewöhnlichen schau tell application "System Events" to tell application process "Firefox"
Baukonstruktion:
- Hauptblock Ziele die Anwendung der folgenden (
tell application "Firefox"
).
- jedoch GUI-Scripting muss im Rahmen der
System Events
Anwendung (tell application "System Events"
), und in diesem Kontext durchgeführt wird, ist es der Prozess Firefox ist, die (tell application process "FireFox"
) ausgerichtet werden müssen. Während Sie zwei verschachteltetell
Blöcke schreiben könnten, sind sie hier aus Bequemlichkeit und Kürze zu einem einzigen Block zusammengefasst.
OpenURL funktioniert nicht mit Leopard ... aber Ihr zweiter Tipp ist brilliant! – tabaluga
Momentan sind wir auf Mac OS 10.12.5. Diese Lösung wird nicht mehr funktionieren. Wenn jemand das noch tun möchte, sollte man die OpenURL durch einen offenen Ort ersetzen, wie in der Antwort blubb erwähnt wird. – JoeMecPak