2016-07-11 1 views
1

`La note de publication de Javascript Automation par Apple a un exemple pour rechercher un tableau avec objectSpecifier arbitraire.Tableaux de filtrage d'Applescript avec l'ObjectSpecifier utilisant Javascript

firstTabsName = ObjectSpecifier.tabs[0].name 
app.windows.whose({_match: [firstTabsName, 'Apple']}) 

Cependant, les premières lignes provoquent une erreur. « TypeError:! Non défini est pas un objet (évaluation « ObjectSpecifier.tabs ») Qu'est-ce que je fais mal Nous vous remercions de votre aide`

Répondre

1

Le premier souffle la queue à firstTabsName = ObjectSpecifier.tabs, qui retourne missing value Rien passé ce moment-là. peut réussir

Le code que vous avez publié semble provenir des Notes de mise à jour Apple, qui ne contient pas un jeu de paires vide après "ObjectSpecifier" et un autre jeu après l'instruction dont. ObjectSpecifier est appelé ET le dernier dont le spécificateur est résolu en une liste de fenêtres correspondantes.Le code corrigé est donc:

app = Application('Safari') 
firstTabsName = ObjectSpecifier().tabs[0].name // added parens 
app.windows.whose({_match: [firstTabsName, "Apple"]})() // added parens 
// --> [Application("Safari").windows.byId(9016)] 
+0

Merci! C'est exactement ce qui manquait. Est-ce possible de mettre un filtre de qui sur un ObjectSpecifier? Quelque chose comme ObjectSpecifier(). Checkboxes.whose ({name: "find"})(). Value – jl303

+0

Je ne pense pas. Depuis 10.11 vous pouvez seulement 1) Vérifier si un objet est un spécificateur d'objet, 2) Obtenir la classe d'un spécificateur d'objet, ou 3) Construire des chaînes de spécificateur d'objet arbitraires à utiliser dans les clauses de qui. Pour votre exemple, vous n'avez pas besoin d'une clause dont vous pouvez spécifier directement l'objet par son nom. Par exemple, pour obtenir la valeur de la propriété persistID de la bibliothèque iTunes, vous utiliserez: 'Application (" iTunes "). Sources.byName (" Bibliothèque "). PersistentID()'. Dont les clauses ne sont nécessaires que lorsque vous avez besoin de filtrer une liste et de retrouver zéro ou plusieurs correspondances dans une autre liste pour un traitement ultérieur. –

+0

Merci beaucoup. Voici ma situation. J'ai un groupe (appelé groupe), contenant un autre groupe de groupes (appelons les gens, et chaque personne contient un tableau de cases à cocher (appelons checkbox) .J'ai besoin d'obtenir la liste des personnes qui ont une case à cocher nommée "mute" et la case à cocher mute doit avoir la valeur 1. La partie délicate est que l'index de la case à cocher Mute change toujours, donc je ne peux pas faire quelque chose comme "ObjectSpecifier(). checkboxes [0] .value". Est-ce possible? cela en utilisant dont la fonction sans utiliser pour la boucle? Merci encore – jl303

0
mute = ObjectSpecifier().checkboxes["Mute"].value 
mutedPersons = people.whose({_match:[mute,"Selected"]}