2010-09-05 6 views

Antwort

2

try this ...

tell application "Firefox" 
    OpenURL "http://rubyquicktips.tumblr.com/" 
end tell 

oder dies versuchen ...

tell application "Firefox" to activate 
tell application "System Events" to keystroke "n" using command down 
tell application "Firefox" 
    OpenURL "http://rubyquicktips.tumblr.com/" 
end tell 
+0

OpenURL funktioniert nicht mit Leopard ... aber Ihr zweiter Tipp ist brilliant! – tabaluga

+0

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

6

dies funktioniert, aber öffnet Ihre willkommener Ort in der ersten Registerkarte ...

tell application "Firefox" to activate 
tell application "System Events" to keystroke "n" using command down 
delay 3 
tell application "Firefox" 
    open location "http://rubyquicktips.tumblr.com/" 
end tell 
+0

Dies funktioniert für mich in OS X 10.8 –

0

Ich bin mit AppleScript nicht ganz vertraut, aber ich wollte ein brandneues Standardfenster öffnen. Hier ist eine Methode, die funktioniert:

tell application "System Events" 
    tell process "Firefox" 
     click menu item "New Window" of menu "File" of menu bar 1 
    end tell 
end tell 

Optional auf das neue Fenster zu konzentrieren, fügen Sie diese Zeilen später:

tell application "Firefox" 
    activate 
end tell 

Dies wird einen Standard neue Fenster geöffnet. Es könnte einen besseren Weg geben.

1

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.
+0

@EdRandall: Ja, welche Anwendung GUI-Skript-Code ausführt, muss autorisiert werden; Ich habe eine explizite Notiz zum Skript-Editor hinzugefügt. Re Timeouts: Gute Idee, aber die Antwort sagt bereits "der Code könnte verbessert werden, indem Timeouts für die Warteschleifen implementiert werden"; nebenbei bemerkt: Es ist kein Mangel an Autorisierung, der diese spezifischen Schleifen zum Verklemmen bringen könnte (die erste benötigt keine Autorisierung, und die zweite würde nicht erreicht werden, wenn die Autorisierung fehlen würde). – mklement0

Verwandte Themen