Introduction à l’action « Exécuter JavaScript sur une page web » dans Raccourcis
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.
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.
À 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 suivant 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.
Astuce : le raccourci Change Video Speed (Modifier la vitesse de la vidéo) est disponible dans la Galerie.
Pour en savoir plus sur l’exécution de raccourcis depuis Safari, consultez Exécuter un raccourci dans une autre app.
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.
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 ». iOS 13 prend en charge les syntaxes JavaScript ECMA 6, y compris les boucles for of
et l’instruction let
.
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.
Confidentialité et sécurité
Lorsque vous autorisez un raccourci à exécuter Javascript sur une page web, celui-ci peut accéder à toutes les informations que contient cette page web, y compris des données potentiellement sensibles. L’app Raccourcis prend quelques mesures pour s’assurer que vos raccourcis JavaScript sont exécutés de façon sécurisée et privée.
Lorsque vous exécutez un raccourci contenant l’action « Exécuter JavaScript sur une page web », une invite vous informe que le raccourci est sur le point d’interagir avec la page web. Cela signifie que le raccourci peut accéder à des données potentiellement sensibles de la page web, comme des mots de passe, des numéros de téléphone ou des informations de cartes bancaires.
Si vous touchez Autoriser, le raccourci s’exécute sur la page web indiquée. Si vous exécutez à nouveau le même raccourci sur la même page web, Raccourcis n’affiche plus l’invite. Cette autorisation est mémorisée pour chaque paire raccourci-page web.
Une fois que vous avez autorisé un raccourci à accéder à une page web, Raccourcis prend une mesure supplémentaire pour vous protéger des scripts potentiellement malveillants en téléchargeant régulièrement des mises à jour de définitions de logiciels malveillants. Avant d’interagir avec une page web, Raccourcis analyse le JavaScript, puis consulte les définitions de logiciels malveillants. En fonction de cette évaluation, Raccourcis reçoit l’instruction d’autoriser le script, de le refuser ou d’afficher une autre invite avant d’autoriser l’exécution du raccourci.
Cette évaluation est réalisée sur votre appareil ; le contenu de votre script JavaScript (dans le champ de texte de l’action « Exécuter JavaScript sur une page web ») n’est pas envoyé à un serveur externe pour analyse.
Si l’exécution du raccourci n’est pas autorisée, un message d’erreur en expliquant la raison apparaît.
Important : il est recommandé de ne jamais exécuter un raccourci contenant un script JavaScript qui vous paraît suspect.