Informazioni sull'azione “Esegui JavaScript sulla pagina web” in Comandi Rapidi
JavaScript è uno dei linguaggi di programmazione più diffusi per scrivere pagine web, poiché consente di creare effetti dinamici nei browser web, tra cui animazioni, menu interattivi, riproduzione di video e molto altro ancora. Di norma, JavaScript non viene visualizzato quando navighi all'interno di un sito web. Tuttavia, puoi gestire il codice JavaScript di una pagina web, creando un comando rapido che contiene l'azione “Esegui JavaScript sulla pagina web” ed eseguendolo dall'app Safari.
I comandi rapidi che eseguono il codice JavaScript personalizzato su una pagina web possono essere utilizzati in molti modi. Ad esempio, puoi creare comandi rapidi per recuperare dati specifici da una pagina web e incorporarli in un'attività. Puoi estrarre l'orario di una determinata lezione e aggiungerlo all'app Calendario; oppure, esportare i dati relativi ai membri di un gruppo su Facebook e inserirli in un foglio di calcolo.
Puoi creare anche comandi rapidi che ti consentano di effettuare modifiche nelle pagine web, come cambiare il font del testo o la velocità di riproduzione dei video.
Per maggiori informazioni sull'utilizzo di comandi rapidi che ti consentano di eseguire JavaScript su una pagina web, consulta: Utilizzare l'azione “Esegui JavaScript sulla pagina web” in Comandi Rapidi.
Recuperare i dati delle pagine web
L'azione “Esegui JavaScript sulla pagina web” ti consente di recuperare dati da una pagina web, raccogliendo tutti gli elementi che corrispondono a determinati criteri, quindi eseguendo delle iterazioni sugli elementi per eseguire delle attività con i dati raccolti o per ispezionarli ulteriormente.
Ad esempio, per creare un elenco di tutti gli elementi immagine di una pagina web, puoi usare il comando:
var elements = document.querySelectorAll("img");
Per recuperare tutti gli elementi corrispondenti alla classe “post,” puoi usare il comando:
var elements = document.querySelectorAll(".post");
Dopo aver creato un NodeList, puoi eseguire varie iterazioni sugli elementi per filtrarli ulteriormente o aggiungerli a una struttura di dati, utilizzando un comando simile a quello di seguito:
var elements = ...;
for (let element of elements) {
// ...
}
Per ulteriori informazioni sul modo in cui recuperare i risultati di una pagina web, consulta https://developer.mozilla.org/Selectors e https://developer.mozilla.org/SelectorAll.
Input dell'azione “Esegui JavaScript sulla pagina web”
L'input dell'azione “Esegui JavaScript sulla pagina web” è una pagina di Safari attiva; questo implica che devi eseguire il comando dall'estensione delle azioni dei comandi rapidi nel pannello di condivisione (nello specifico da Safari, SFSafariViewController o ASWebAuthenticationSession).
Quando il comando rapido viene eseguito dal pannello di condivisione, l'input dall'app Safari viene passato alla prima azione del comando.
Sebbene l'input dell'azione “Esegui JavaScript sulla pagina web” debba essere necessariamente una pagina web di Safari, puoi aggiungere ulteriori dati mediante le variabili magiche. Ad esempio, il comando rapido mostrato di seguito contiene un'azione “Esegui JavaScript sulla pagina web” che è in grado di modificare un video sulla pagina web. La velocità di riproduzione del video è controllata dalla variabile Velocità.
Suggerimento: Il comando Change Video Speed, per la modifica della velocità dei video, è disponibile nella galleria.
Se “Esegui JavaScript sulla pagina web” non è la prima azione del comando rapido, quando lo esegui, verrà visualizzato un messaggio di errore.
Per correggerlo, aggiungi un'azione “Ottieni variabile” e imposta i parametri sulla pagina web di Safari affinché i contenuti di quest'ultima vengano passati all'azione “Esegui JavaScript sulla pagina web”.
Per informazioni su come eseguire i comandi rapidi da Safari, consulta: Impostare ed eseguire i comandi rapidi da un’altra app.
Output dell'azione “Esegui JavaScript sulla pagina web”
Per restituire i dati, è necessario richiamare l'handler di completamento in JavaScript, come completion(result)
. Poiché normalmente JavaScript viene utilizzato con modelli asincroni, il richiamo deve essere intenzionalmente non sincrono. In questo modo, l'azione sarà completata in modo asincrono. Ad esempio, si applica quanto segue:
window.setTimeout(function() {
completion(true);
}, 1000);
L'output dell'azione “Esegui JavaScript sulla pagina web” corrisponde a tutti i tipi di dati JSON validi, tra cui:
String
Number
Booleano (true o false)
Array (contenente qualsiasi altro tipo di dato JSON valido)
Dictionary (contenente qualsiasi altro tipo di dato JSON valido)
Null
Undefined
Per ulteriori informazioni su JSON, consulta Informazioni sull’uso di JSON in Comandi Rapidi.
Comandi Rapidi codifica e decodifica automaticamente in background il valore restituito per consentire la comunicazione tra JavaScript e l'app Comandi Rapidi. Non dovrai quindi richiamare JSON.stringify(result)
prima di richiamare l'handler di completamento.
Poiché il valore restituito è in formato JSON, in alcuni casi, non funzionerà correttamente. Per esempio, una funzione o un nodo (Node) non avranno una rappresentazione codificata in JSON utile. Nel caso in cui si verifichi questa eventualità, è consigliabile creare un Array/Dictionary che contenga i valori compatibili con JSON che ti occorrono.
Per ulteriori informazioni sui nodi, consulta https://developer.mozilla.org/Node; Per ulteriori informazioni sulle funzioni, consulta https://developer.mozilla.org/Functions.
Nota: poiché un oggetto in JavaScript è semplicemente un Dictionary, la conversione degli oggetti di base in JSON funziona bene.
Se vuoi che l'azione “Esegui JavaScript sulla pagina web” non restituisca dati, puoi richiamare il comando completion()
senza inserire alcun argomento nella funzione, poiché il valore undefined
è un output valido. Questo corrisponde al comando completion(undefined)
.
Limite di tempo dell'azione “Esegui JavaScript sulla pagina web”
Come tutte le estensioni JavaScript di Safari, l'azione “Esegui JavaScript sulla pagina web” è soggetta a un limite di tempo e deve essere completata il più presto possibile. I JavaScript che utilizzano funzioni sincrone potrebbero non terminare in tempo, tra cui:
window.alert()
window.prompt()
window.confirm()
Timeout che durano vari secondi. Per esempio:
window.setTimeout(function() { completion(); }, 5000);
Se il JavaScript super il limite di tempo, il comando rapido non verrà completato e, quando lo eseguirai, visualizzerai un messaggio di errore di timeout di JavaScript.
Sintassi e gestione degli errori di runtime
Per scrivere il codice JavaScript nell'azione “Esegui JavaScript sulla pagina web”, puoi utilizzare qualsiasi tipo di sintassi supportato in Safari. iOS 12 supporta la sintassi JavaScript ECMA 6, inclusi i loop for of
e let
.
Nell'app Comandi Rapidi, l'azione “Esegui JavaScript sulla pagina web” ti consente di scovare eventuali errori facendo una verifica della sintassi di base prima di eseguire il comando dall'estensione di Safari.
Mentre digiti lo script nel campo di testo, la sintassi viene evidenziata in modo da garantire che il codice JavaScript sia valido. Ad esempio, se ti dimentichi di aggiungere le virgolette alla fine della stringa, tutta la porzione di testo successiva verrà evidenziata.
Se la sintassi dello script è corretta ma presenta un errore di runtime, l'azione “Esegui JavaScript sulla pagina web” identifica e mostra tutte le eccezioni. Ad esempio, se lo script fa riferimento a una variabile o a una funzione che non esiste, ad esempio shortcuts.completion()
, verrà restituito un errore di runtime.
Privacy e sicurezza
Quando consenti un a comando di eseguire Javascript su una pagina web, tale comando può accedere a tutte le informazioni presenti sulla pagina, compresi dati potenzialmente sensibili. Nell'app Comandi Rapidi sono state implementate alcune funzionalità per garantire che i comandi rapidi per JavaScript vengano eseguiti nel rispetto della sicurezza e della privacy.
Quando esegui un comando rapido contenente l'azione “Esegui JavaScript sulla pagina web”, viene visualizzato un messaggio che ti informa che il comando sta per interagire con la pagina web. Questo significa che il comando rapido può accedere a dati potenzialmente sensibili di una pagina web, quali password, numeri di telefono o informazioni relative alle carte di credito.
Dopo aver selezionato la voce Consenti, il comando rapido viene eseguito sulla pagina web specificata. Se esegui lo stesso comando rapido sulla stessa pagina web, la finestra di dialogo non viene visualizzata una seconda volta. Il permesso viene memorizzato sulla base della combinazione comando rapido-pagina web.
Dopo aver consentito al comando rapido di accedere a una pagina web, l'app Comandi Rapidi adotta ulteriori misure per proteggere l'utente da script dannosi scaricando periodicamente definizioni aggiornate di malware. Prima di interagire con una pagina web, Comandi Rapidi analizza il JavaScript, quindi verifica le definizioni di malware. Sulla base di questa valutazione, Comandi Rapidi riceve l'istruzione di autorizzare lo script, di bloccarlo o di visualizzare un'ulteriore finestra di dialogo prima di eseguire il comando.
La valutazione viene eseguita esclusivamente sul tuo dispositivo, i contenuti di JavaScript (nel campo di testo dell'azione “Esegui JavaScript sulla pagina web”) non vengono inviati a un server esterno a scopo di analisi.
Se l'esecuzione del comando rapido è stata bloccata, viene visualizzato un messaggio di errore esplicativo.
Importante: non è consigliabile eseguire un comando rapido che contiene JavaScript che non ritieni affidabile.