Introduction à l’action « Exécuter JavaScript sur une page web » dans Raccourcis sur Mac
Presque toutes les pages web intègrent des scripts JavaScript, un langage de programmation permettant de créer des effets dynamiques dans les navigateurs, notamment des animations, des menus interactifs, la lecture de vidéos, et plus encore. En général, vous n’avez pas accès à l’environnement d’exécution JavaScript pendant que vous consultez un site web. Toutefois, en créant un raccourci contenant l’action « Exécuter JavaScript sur une page web », puis en exécutant ce raccourci depuis l’app Safari, vous pouvez contrôler l’environnement d’exécution JavaScript d’une page web.
L’exécution d’un script JavaScript personnalisé sur une page web à l’aide d’un raccourci offre une multitude de possibilités. Par exemple, vous pouvez créer des raccourcis qui récupèrent des données spécifiques d’une page web puis les intègrent à une tâche, comme extraire un planning de cours puis l’ajouter à l’app Calendrier, ou exporter les données des membres d’un groupe de réseau social puis les ajouter à une feuille de calcul.
Vous pouvez également créer des raccourcis vous permettant de modifier une page web, comme changer la police du texte ou la vitesse de lecture d’une vidéo. Avant de pouvoir exécuter JavaScript depuis un raccourci, vous devez activer le 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 exécutant 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 de données d’une page web
L’action « Exécuter JavaScript sur une page web » vous permet de récupérer des données sur une page web en collectant tous les éléments correspondant à certains critères, puis en itérant sur ces éléments pour manipuler les données (ou pour les examiner plus en détail).
Par exemple, pour créer une liste de tous les éléments d’image d’une page web, utilisez :
var elements = document.querySelectorAll("img");
De même, pour récupérer tous les éléments associés à la classe « post », utilisez :
var elements = document.querySelectorAll(".post");
Une fois l’objet NodeList créé, vous pouvez itérer sur les éléments (pour les filtrer davantage ou les ajouter à une structure de données) en utilisant par exemple :
var elements = ...;
for (let element of elements) {
// ...
}
Pour en savoir plus sur l’interrogation des résultats d’une page web, consultez les pages suivantes : https://developer.mozilla.org/fr/Selectors et https://developer.mozilla.org/fr/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 active dans Safari, ce qui signifie que vous devez exécuter le raccourci depuis la feuille de partage (depuis Safari, SFSafariViewController ou ASWebAuthenticationSession).
Lorsqu’un raccourci est exécuté depuis la feuille de partage, l’entrée issue de l’app Safari est transmise à la première action de votre raccourci.
Bien que l’entrée de l’action « Exécuter JavaScript sur une page web » doive être une page web Safari, vous pouvez insérer des données supplémentaires dans l’action à l’aide de variables magiques. Par exemple, le raccourci Changer 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 Vitesse.
Pour en savoir plus sur l’exécution de raccourcis depuis Safari, consultez Exécuter un raccourci tout en travaillant sur le Mac.
Résultat de l’action « Exécuter JavaScript sur une page web »
Pour que des données soient renvoyées, vous devez appeler le gestionnaire d’achèvement en langage JavaScript, par exemple completion(result)
. Comme le JavaScript est généralement utilisé avec des modèles asynchrones, l’appel n’est volontairement pas synchrone. Vous pouvez ainsi terminer l’action de façon asynchrone. Par exemple, le code suivant est valide :
window.setTimeout(function() {
completion(true);
}, 1000);
Le résultat de l’action « Exécuter JavaScript sur une page web » peut être n’importe quel type de données JSON valide, notamment :
une chaîne ;
un nombre ;
une valeur booléenne (« true » ou « false ») ;
un tableau (contenant tout autre type JSON valide) ;
un dictionnaire (contenant tout autre type JSON valide) ;
une valeur Null
une valeur Undefined
En arrière-plan, Raccourcis encode et décode automatiquement la valeur renvoyée afin d’assurer la communication entre le JavaScript et l’app Raccourcis. Autrement dit, vous n’avez pas besoin d’appeler JSON.stringify(result)
avant d’appeler le gestionnaire d’achèvement.
Les valeurs renvoyées étant des chaînes JSON, certaines d’entre elles seront difficilement exploitables. Par exemple, une fonction ou un nœud n’aura pas de représentation utile encodée au format JSON. Dans ce cas, il est recommandé de créer un tableau/dictionnaire contenant les valeurs compatibles JSON dont vous avez besoin.
Remarque : comme un objet JavaScript est un simple dictionnaire, les objets de base se convertissent bien au format JSON.
si vous ne voulez pas que l’action « Exécuter JavaScript sur une page web » renvoie des données, vous pouvez appeler la fonction completion()
sans argument (car undefined
est un résultat valide). Cela revient à appeler completion(undefined)
.
Pour en savoir plus sur le format JSON, consultez la rubrique Introduction à l’utilisation de JSON dans Raccourcis sur Mac.
Pour en savoir plus sur les Nœuds, consultez https://developer.mozilla.org/Node.
Pour en savoir plus sur les fonctions, consultez 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 doit être terminée le plus vite possible. Les scripts JavaScript utilisant des fonctions synchrones risquent de ne pas se terminer à temps, notamment :
window.alert()
window.prompt()
window.confirm()
Les délais de plusieurs secondes, par exemple :
window.setTimeout(function() { completion(); }, 5000);
Si votre script JavaScript dépasse la limite de temps, le raccourci ne pourra pas se terminer et un message d’erreur Expiration du délai JavaScript apparaitra lorsque vous l’exécuterez.
Traitement des erreurs de syntaxe et d’exécution
Vous pouvez utiliser n’importe quelle syntaxe prise en charge dans Safari pour créer un script 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 procédant à une vérification syntaxique élémentaire avant d’exécuter le raccourci à partir de l’extension Safari.
Pendant la saisie du script dans le champ de texte, la mise en évidence de la syntaxe vous permet de vous assurer que votre code JavaScript est valide. Par exemple, si vous oubliez d’inclure les guillemets à la fin d’une chaîne, tout le texte qui suit celle-ci est mis en évidence.
Si la syntaxe de votre script est valide mais qu’elle présente une erreur d’exécution, l’action « Exécuter JavaScript sur une page web » intercepte et affiche les exceptions. Par exemple, si votre script fait appel à une variable ou fonction qui n’existe pas (comme shortcuts.completion()
), une erreur apparaît à l’exécution.