Le raccourci clavier pour AppleScript ne fonctionne que lorsque la fenêtre de préférences est ouverte

2

J'ai créé cet AppleScript pour lire / mettre en pause des vidéos Youtube s'exécutant sur Chrome:

on run {input, parameters}

    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('ytp-play-button ytp-button')[0].click();"
    end tell

    return input
end run

Cela fonctionne bien quand je le lance Automator. J'ai enregistré le service et ajouté un raccourci clavier + Jpour l'exécution du service. J'ai également ajouté Automatoraux Accessibilityparamètres (suite à cette réponse SO ).

Maintenant, voici la partie étrange: cela fonctionne lorsque la System Preferencesfenêtre est active. Si je le ferme ou si je passe à une autre fenêtre, le raccourci ne fonctionne pas. J'ai remarqué que cela fonctionne car il y a un élément de menu dans la System Preferencesfenêtre qui correspond au raccourci et qui se déclenche lorsque j'appuie sur le raccourci.

S'il vous plaît aider. Merci d'avance.

th3an0maly
la source
Utilisez un autre raccourci, car il s'agit déjà d'un raccourci dans plusieurs applications. ( Preview, Script Editor, Mail, TextEdit, iTunes, Safari, Finder, Terminal, Microsoft Word, TextWrangler, Automator, etc ..)
jackjr300

Réponses:

1

Comme je l'ai mentionné dans mon commentaire à la réponse de wch1zpink, "S'assurer que les paramètres du service sont corrects et que la séquence de touches de raccourci n'est pas utilisée par un autre est la première étape" et a ensuite été mentionné par jackjr300 dans son commentaire. Changer le raccourci clavier en un raccourci qui n’est utilisé par aucun autre élément du système ou de toute application (c’est-à-dire si «Les services ne reçoivent aucune entrée dans aucune application ») fonctionne pour moi, que les Préférences Système soient ouvertes ou non , lors de l’utilisation de le code , tel quel , dans l'OP et une séquence de touches non en conflit.

Aucune application n'est également nécessaire dans les préférences système > Sécurité et confidentialité > Confidentialité > Accessibilité pour ce cas d'utilisation particulier, qu'elle soit exécutée à partir d' Automator ou lorsque vous utilisez un raccourci clavier non conflictuel dans Préférences système > Clavier > Raccourcis > Services > (Nom que vous avez donné au service) .

Pour résoudre votre problème, vous devez utiliser un raccourci clavier qui n'est pas déjà attribué ailleurs dans le système et / ou dans les applications.

Vous devrez peut-être utiliser une séquence de trois ou quatre touches car il y a très peu, voire aucun, combos à deux touches qui ne sont pas déjà utilisés.


Sur une note de côté, return inputn'est pas du tout nécessaire dans le code dans ce cas d'utilisation particulier.

utilisateur3439894
la source
0

Essayez de substituer ce code entier dans votre message avec exactement ceci:

to clickClassName(theClassName, elementnum)
    tell application "Google Chrome" to (tabs of window 1 whose URL contains "youtube")
    set youtubeTabs to item 1 of the result
    tell application "Google Chrome"
        execute youtubeTabs javascript "document.getElementsByClassName('" & theClassName & "')[" & elementnum & "].click();"
    end tell
end clickClassName    

clickClassName("ytp-play-button ytp-button", 0)

entrez la description de l'image ici

wch1zpink
la source
J'ai essayé ça. Toujours le même comportement. Fonctionne quand la Preferencesfenêtre est ouverte, pas autrement.
jeudi 3
1
Essayez également d'ajouter Google Chrome aux paramètres d'accessibilité.
wch1zpink
Je suis curieux de savoir pourquoi, selon vous, insérer le code dans un gestionnaire et appeler le gestionnaire pour exécuter la execute commande produira des résultats différents de ceux obtenus en appelant execute directement une commande correctement formée _, sans utiliser de gestionnaire? L'utilisation d'un gestionnaire ne va pas faire la moindre différence dans ce cas d'utilisation, car les deux variantes de codage font exactement la même choseexecute tab id # of window id # javascript "document.getElementsByClassName('ytp-play-button ytp-button')[0].click();"
Elles
Le fait que le code, tel qu'il est écrit dans l'OP, fonctionnait déjà lorsqu'il était exécuté dans Automator (ou Script Editor) montre que le code lui-même n'est pas faux et qu'il n'est pas explicitement nécessaire de l'utiliser dans un gestionnaire pour résoudre le problème exprimé. En passant, il est de notoriété publique que les séquences de touches de raccourci ajoutées par l'utilisateur sont erronées, fonctionnent sporadiquement par moment ou pas du tout pour certains utilisateurs. Changer la manière dont le code est exécuté ne résoudra pas le problème dans ce cas d'utilisation. La première étape consiste à vérifier que les paramètres du service sont corrects et que la séquence de touches de raccourci n'est pas utilisée.
user3439894
Le code est encapsulé dans un gestionnaire car, à l'origine, j'ai un script dans lequel j'ai des tonnes d'extraits et que j'appelle généralement le gestionnaire à partir d'une charge d'action de script. Je viens de copier le code avec le gestionnaire Au cas où d'autres voudraient essayer de l'utiliser plusieurs fois dans un script.
wch1zpink