Verbessern Sie AppleScript, um mit Safari ein neues privates Fenster zu öffnen

1

Ich habe dieses AppleScript für das Skript-Tool erstellt. Es kann als die Anwendung gespeichert werden, die mit einem Klick gestartet werden soll. Ich muss den Antrag allerdings im Security Edit Tool genehmigen.

Dies öffnet den privaten Browser durch Anklicken der Menüpunkte. Anschließend wird das erste Fenster geschlossen, indem im Menü Fenster nach der undenkbaren URL gesucht wird. Es funktioniert, ist aber auffällig, wenn sich die Fenster öffnen und schließen.

Ich wünschte, es könnte auf irgendeine Weise verbessert werden, indem man das Klicken auf die Verknüpfung zulässt und dann sieht, dass nur das Safari-Fenster im privaten Modus ohne so viel "Makro" -ähnliches Erscheinungsbild gestartet wird. Können Sie mir dabei helfen, dies zu verbessern?

# 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
quelle
Warum muss zuerst ein Junk-Standort geöffnet werden?
Tetsujin
@ Tetsujin, Ich vermute, er / sie codiert es so, als ob Safari geschlossen wäre und öffnet beim Öffnen natürlich ein Fenster und möchte dieses Fenster wahrscheinlich öffnen. Wenn Sie den Speicherort so einstellen, dass vorhersehbar die Meldung "Seite konnte nicht geöffnet werden" angezeigt wird, ist dies wahrscheinlich eine sichere Möglichkeit, das Fenster zu schließen. Wie auch immer, ich habe meine Antwort bearbeitet, um zu zeigen, wie ich damit umgehen würde. Wenn Sie sehen, wo es besser / anders machen kann, kommentieren Sie bitte, danke.
user3439894
@ user3439894 - nein, ich denke du hast es gut abgedeckt, umso mehr mit der Bearbeitung.
Tetsujin
ndasusers, ich weiß nicht, ob Sie meine Antwort gesehen haben, aber ich habe kürzlich den Block von geändert Code Ich würde wählen, um zu erreichen, was ich glaube, dass Sie versuchen, mit Ihrem zu erreichen Code Sie sollten sich meine Antwort also noch einmal ansehen.
user3439894

Antworten:

2

Versuche Folgendes:

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

Jetzt ist hier das Code Ich würde mich für die Verwendung entscheiden, da geprüft wird, ob Safari bereits geöffnet ist. Wenn ja, wird nur ein neues privates Fenster geöffnet. Wenn nicht, dann funktioniert es so, wie ich glaube, Sie wollten das Eröffnungsfenster schließen und dann ein neues Privatfenster öffnen.

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
  • Hinweis: Der Wert der delay muss möglicherweise an die Geschwindigkeit Ihres Systems angepasst werden. Wie codiert sind die aktuellen Werte von delay Funktioniere gut auf meinem System. Der Wert ist in Sekunden oder Fraktionen davon als Dezimal Wert.

Übrigens sehe ich keine Notwendigkeit, einen neuen Tab zu öffnen, um " Eine URL, die nicht gefunden werden kann "wie ich meine Methode hier im Block von glaube Code direkt oben, erreicht Ihr angestrebtes Ziel sowohl schnell als auch ohne, wie Sie es formulieren. " sehen Sie, dass das Safari-Fenster im privaten Modus ohne so viel "Makro" -ähnliches Aussehen gestartet wird. ".


Übrigens, die Code in Ihrer Frage könnte auf das folgende Beispiel reduziert werden und würde tatsächlich ein bisschen schneller ablaufen, als Sie es derzeit codiert haben.

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

Mein erstes (und zweites) Beispiel oben in dieser Antwort wirkt jedoch direkt, ohne dass die Menüs geöffnet und geschlossen werden, da keine Klickereignisse verwendet werden, sondern Tastendruck. Auch während das kondensierte Beispiel Ihres Code ist nur das, ich würde es nicht ohne angemessen verwenden delay wo zutreffend.

Am Ende würde ich den zweiten Block von verwenden Code in dieser Antwort gezeigt.

user3439894
quelle
0

Mein Problem mit @ user3439894 Die Antwort oben ist, dass, wenn Safari in einem anderen Bereich geöffnet ist, Sie zuerst zu diesem wechseln und dort ein neues Fenster öffnen können, anstatt im aktuellen Bereich. Also benutze ich:

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

Was ich gut finde, funktioniert, obwohl es ein bisschen langsamer sein kann.

daphtdazz
quelle