Introduction à l’action « Exécuter JavaScript sur une page Web » dans Raccourcis sur Mac
Presque toutes les pages Web utilisent JavaScript, un langage de programmation qui crée des effets dynamiques dans les navigateurs, y compris des animations, des menus interactifs, des lecteurs de vidéo, etc. Généralement, JavaScript n’est pas visible lorsque vous visitez un site Web. Cependant, en créant un raccourci qui contient l’action « Exécuter JavaScript sur une page Web », puis en exécutant le raccourci à partir de l’app Safari, vous pouvez contrôler les éléments JavaScript de la page Web.
Les raccourcis qui exécutent vos actions JavaScript personnalisées sur une page Web offrent d’innombrables possibilités d’utilisation. Par exemple, vous pouvez créer des raccourcis qui récupèrent des données précises d’une page Web pour ensuite les incorporer dans une tâche. Par exemple, vous pouvez extraire l’horaire d’un cours, puis l’ajouter à l’app Calendrier, ou exporter les données des membres d’un groupe de médias sociaux, puis les ajouter à une feuille de calcul.
Vous pouvez aussi créer des raccourcis qui permettent de modifier une page Web, comme la police du texte ou la vitesse de lecture d’une vidéo. Avant de pouvoir exécuter JavaScript à partir d’un raccourci, vous devez activer ce réglage. Consultez la rubrique Réglages avancés de confidentialité et de sécurité dans Raccourcis sur Mac.
Pour en savoir plus sur l’utilisation de raccourcis qui exécutent JavaScript sur une page Web, consultez la rubrique Utiliser l’action « Exécuter JavaScript sur une page Web » dans Raccourcis sur Mac.
À propos de la récupération des données d’une page Web
L’action « Exécuter JavaScript sur une page Web » vous permet de récupérer des données d’une page Web en extrayant tous les éléments qui satisfont à des critères précis, puis en parcourant ces éléments pour utiliser les données (ou pour inspecter ces éléments plus profondément).
Par exemple, pour créer une liste de toutes les images d’une page Web, utilisez :
var elements = document.querySelectorAll("img");
Sinon, pour récupérer tous les éléments de la classe « post », utilisez :
var elements = document.querySelectorAll(".post");
Une fois qu’un élément NodeList est créé, vous pouvez parcourir tous les éléments (pour filtrer davantage les éléments ou pour les ajouter à une structure de données) de la façon suivante :
var elements = ...;
for (let element of elements) {
// ...
}
Pour en savoir plus sur la consultation de résultats de pages Web, rendez-vous sur https://developer.mozilla.org/Selectors et https://developer.mozilla.org/SelectorAll.
Entrée de l’action « Exécuter JavaScript sur une page Web »
L’entrée de l’action « Exécuter JavaScript sur une page Web » doit être une page Web Safari active. Vous devez donc exécuter le raccourci à partir de la feuille de partage (spécifiquement à partir de Safari, de SFSafariViewController ou d’ASWebAuthenticationSession).
Lorsqu’un raccourci est exécuté à partir de la feuille de partage, l’entrée de l’app Safari est transmise à la première action de votre raccourci.
Même si l’entrée de l’action « Exécuter JavaScript sur une page Web » doit être une page Web Safari, vous pouvez insérer des données supplémentaires dans l’action avec les variables magiques. Par exemple, le raccourci Modifier la vitesse de la vidéo (disponible dans la Galerie) contient une action « Exécuter JavaScript sur une page Web » qui modifie une vidéo sur une page Web. La vitesse de lecture de la vidéo est contrôlée par la variable de vitesse.
Pour en savoir plus sur l’exécution de raccourcis à partir de Safari, consultez la rubrique Exécuter un raccourci tout en utilisant le Mac.
Sortie de l’action « Exécuter JavaScript sur une page Web »
Pour renvoyer des données, vous devez appeler le gestionnaire d’achèvement dans JavaScript, en utilisant par exemple la fonction completion(result)
. Étant donné que JavaScript est normalement utilisé avec des modèles asynchrones, l’appel n’est délibérément pas synchrone. Ainsi, vous pouvez terminer l’action de façon asynchrone. Par exemple, le script suivant est valide :
window.setTimeout(function() {
completion(true);
}, 1000);
La sortie de l’action « Exécuter JavaScript sur une page Web » peut être n’importe quel type de données JSON valide parmi les suivants :
Chaîne
Nombre
Booléen (vrai ou faux)
Tableau (contenant tout autre type de données JSON valide)
Dictionnaire (contenant tout autre type de données JSON valide)
Nul
Non défini
En coulisses, Raccourcis code et décode automatiquement votre valeur retournée pour la communication entre JavaScript et l’app Raccourcis. Cela signifie que vous n’avez pas à appeler JSON.stringify(result)
avant d’appeler le gestionnaire d’achèvement.
Étant donné que la valeur renvoyée est de type JSON, certaines valeurs renvoyées ne seront pas traitées correctement. Par exemple, une fonction ou un nœud peut ne pas avoir de représentation utile en format JSON. Dans ce cas, il est conseillé de créer un tableau/dictionnaire qui contient les valeurs compatibles avec JSON dont vous avez besoin.
Remarque : Étant donné qu’un objet dans JavaScript constitue un dictionnaire, les objets de base sont faciles à convertir en JSON.
Si vous ne souhaitez pas renvoyer des données de l’action « Exécuter JavaScript sur une page Web », vous pouvez appeler completion()
sans argument dans la fonction (car undefined
est une sortie valide). C’est la même chose que d’appeler completion(undefined)
.
Pour plus d’informations sur JSON, consultez la rubrique Introduction à l’utilisation de JSON dans Raccourcis sur Mac.
Pour en savoir plus sur les nœuds, visitez le https://developer.mozilla.org/Node.
Pour en savoir plus sur les fonctions, visitez le https://developer.mozilla.org/Functions.
Limite de temps de l’action « Exécuter JavaScript sur une page Web »
Comme toutes les extensions JavaScript dans Safari, l’action « Exécuter JavaScript sur une page Web » est soumise à une limite de temps et devrait être réalisée aussi rapidement que possible. Il se peut que le JavaScript qui utilise des fonctions synchrones ne soit pas achevé à temps, notamment :
window.alert()
window.prompt()
window.confirm()
Délais qui durent plusieurs secondes, par exemple :
window.setTimeout(function() { completion(); }, 5000);
Si votre JavaScript dépasse la limite de temps, le raccourci sera inachevé et un message d’erreur Délai du JavaScript s’affichera à l’exécution du raccourci.
Traitement des erreurs de syntaxe et de délai d’expiration
Vous pouvez utiliser toute syntaxe prise en charge dans Safari pour écrire en JavaScript dans l’action « Exécuter JavaScript sur une page Web ».
Dans l’app Raccourcis, l’action « Exécuter JavaScript sur une page Web » vous aide à repérer les erreurs en effectuant une vérification élémentaire de la syntaxe avant que vous exécutiez le raccourci à partir de l’extension Safari.
Alors que vous entrez votre script dans le champ de texte, la mise en surbrillance de la syntaxe vous permet de valider votre programmation JavaScript. Par exemple, si vous oubliez d’inclure des guillemets à la fin d’une chaîne, le texte qui suit est mis en surbrillance.
Si la syntaxe de votre script est valide et une erreur d’expiration s’est produite, l’action « Exécuter JavaScript sur une page Web » identifie et affiche les exceptions. Par exemple, si votre script fait référence à une variable ou à une fonction qui n’existe pas (telle que shortcuts.completion()
), une erreur s’affiche pendant l’exécution.