2 votes

Améliorer applescript pour ouvrir une nouvelle fenêtre privée avec Safari

J'ai réalisé cet AppleScript pour l'utiliser avec l'outil script. Il peut être enregistré comme application à lancer à partir d'un clic. Je dois cependant approuver l'application dans l'outil d'édition de sécurité.

Cela ouvre le navigateur privé en cliquant sur les éléments du menu. Puis il ferme la première fenêtre en cherchant l'impensable URL dans le menu Fenêtre. Cela fonctionne mais c'est flashy car les fenêtres s'ouvrent et se ferment.

J'aimerais que l'on puisse l'améliorer en permettant de cliquer sur le raccourci et de voir que seule la fenêtre Safari est lancée en mode privé sans avoir l'apparence d'une "macro". Pouvez-vous m'aider à améliorer cette fonction ?

# 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

0 votes

Pourquoi doit-elle d'abord ouvrir un site de pacotille ?

0 votes

@Tetsujin, Je pense que c'est parce qu'il/elle code comme si Safari était fermé et qu'il/elle ouvre bien sûr une fenêtre quand il/elle s'ouvre et veut probablement que cette fenêtre soit ouverte. En le paramétrant à un emplacement qui produira de manière prévisible "Failed to open page", il/elle pense probablement que c'est un moyen sûr de fermer cette fenêtre. Quoi qu'il en soit, j'ai modifié ma réponse pour montrer comment je m'y prendrais. Si vous voyez où il peut le faire mieux/différemment, veuillez commenter, merci.

0 votes

@user3439894 - non, je pense que vous l'avez bien couvert, encore plus avec l'édition.

2voto

user3439894 Points 52496

Essayez ce qui suit :

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

Maintenant, voici le code Je choisirais de l'utiliser car il vérifie si Safari est déjà ouvert et si oui, il ouvre simplement une nouvelle fenêtre privée. Si ce n'est pas le cas, il fonctionne comme vous l'aviez prévu, c'est-à-dire qu'il ferme la fenêtre ouverte et ouvre une nouvelle fenêtre privée.

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
  • Note : La valeur de la delay peut avoir besoin d'être ajusté pour la vitesse de votre système. Telles qu'elles sont codées, les valeurs actuelles de delay fonctionnent bien sur mon système. La valeur est en secondes ou ses fractions en tant que décimal valeur.

D'ailleurs, je ne vois pas la nécessité d'ouvrir un nouvel onglet pour " une URL qui ne peut être trouvée " comme je crois que ma méthode ici, dans le bloc de code directement ci-dessus, atteint le but recherché, à la fois rapidement et sans, comme vous le dites, " voir que la fenêtre Safari est lancée en mode privé sans avoir l'apparence d'une "macro". ".


D'ailleurs, le code dans votre question pourrait être réduit à l'exemple ci-dessous et fonctionnerait en fait un peu plus rapidement que la façon dont vous l'avez actuellement codé.

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

Cependant, mon premier (et deuxième) exemple, en haut de cette réponse, agit directement sans voir les menus s'ouvrir et se fermer car il n'utilise pas les événements de clics mais les pressions de touches. De même, alors que l'exemple condensé de votre code c'est juste ça, je ne l'utiliserais pas sans une bonne dose de delay le cas échéant.

Au final, je choisirais d'utiliser le deuxième bloc de code montré dans cette réponse.

0voto

daphtdazz Points 101

Mon problème avec @user3439894 La réponse de l'auteur ci-dessus est que si Safari est d'abord ouvert dans un autre espace, vous pouvez y basculer et ouvrir une nouvelle fenêtre au lieu de l'espace actuel. J'utilise donc :

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

Ce qui fonctionne bien, même si c'est un peu plus lent.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X