À propos de l’action « Exécuter JavaScript sur une page Web » dans Raccourcis
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 Facebook, 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.
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.
À 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 l’extension d’action Raccourcis 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 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 de vitesse.
Astuce : Le raccourci Modifier la vitesse vidéo est disponible dans la galerie.
Si l’action « Exécuter JavaScript sur une page Web » n’est pas la première dans votre raccourci, un message d’erreur s’affichera lorsque vous exécuterez le raccourci.
Pour corriger cela, vous pouvez ajouter une action « Obtenir la variable » et régler son paramètre vers la page Web Safari pour transmettre son contenu à l’action « Exécuter JavaScript sur une page Web ».
Pour en savoir plus sur l’exécution de raccourcis à partir de Safari, consultez la rubrique Configurer et exécuter des raccourcis à partir d’une autre app.
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
Pour plus d’informations sur JSON, consultez la rubrique À propos de l’utilisation de JSON dans Raccourcis.
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.
Pour en savoir plus sur les nœuds, rendez-vous sur https://developer.mozilla.org/Node; pour en savoir plus sur les fonctions, rendez-vous sur https://developer.mozilla.org/Functions.
Remarque : Étant donné qu’un objet dans JavaScript constitue un dictionnaire, les objets de base sont faciles à convertir en JSON.
Astuce : 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 (parce que non défini
est une sortie valide). C’est la même chose que d’appeler completion(undefined)
.
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 ». iOS 12 prend en charge la syntaxe ECMA 6 JavaScript, y compris let
et les boucles for of
.
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.
Confidentialité et sécurité
Lorsque vous autorisez un raccourci à exécuter JavaScript sur une page Web, le raccourci peut accéder à toutes les informations de la page Web, y compris aux données potentiellement sensibles. L’app Raccourcis prend quelques mesures pour vérifier que vos raccourcis JavaScript s’exécutent en toute sécurité et confidentialité.
Lorsque vous exécutez un raccourci qui contient une action « Exécuter JavaScript sur une page Web », un message 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 à partir de la page Web, comme des mots de passe, des numéros de téléphone ou des renseignements de carte de crédit.
Le raccourci s’exécute sur la page Web spécifiée lorsque vous touchez Autoriser. Si vous exécutez le raccourci à nouveau sur la même page Web, Raccourcis n’affiche plus l’invite. Cette autorisation persiste en fonction du raccourci et de la page Web.
Lorsque vous avez autorisé un raccourci à accéder à une page Web, Raccourcis prend une mesure supplémentaire pour renforcer votre protection contre les scripts potentiellement malveillants en téléchargeant périodiquement des définitions de logiciels malveillants mises à jour. Avant d’interagir avec une page Web, Raccourcis analyse le JavaScript, puis consulte les définitions de logiciels malveillants. Sur la base de cette évaluation, Raccourcis reçoit l’instruction d’autoriser le script, de refuser le script ou d’afficher une boîte de dialogue supplémentaire avant d’autoriser l’exécution du raccourci.
Remarque : Cette évaluation est réalisée sur votre appareil; les contenus de votre JavaScript (dans le champ de texte de l’action « Exécuter JavaScript sur une page Web ») ne sont pas envoyés à un serveur externe pour analyse.
Si l’exécution du raccourci a été refusée, une explication s’affiche sous la forme d’un message d’erreur.
Important : N’exécutez jamais un raccourci qui contient du JavaScript auquel vous ne faites pas confiance.