De taak 'Voer JavaScript uit op webpagina' in Opdrachten op de iPhone of iPad
Bijna alle webpagina's gebruiken de programmeertaal JavaScript om in webbrowsers dynamische effecten te creëren, zoals animaties, interactieve menu's en video's. In het algemeen zie je niets van JavaScript bij het bekijken van een website. Maar door een opdracht te maken die de taak 'Voer JavaScript uit op webpagina' bevat en vervolgens de opdracht vanuit de Safari-app uit te voeren, kun je het JavaScript op een webpagina beheren.
Opdrachten die je eigen JavaScript op een webpagina uitvoeren, hebben talloze toepassingen. Je kunt bijvoorbeeld opdrachten maken die specifieke gegevens uit een webpagina ophalen en die gegevens vervolgens in een taak opnemen, zoals het ophalen van een klassenrooster om dat vervolgens in de Agenda-app te zetten, of het exporteren van de gegevens van een sociale-mediagroep om die gegevens in een spreadsheet te zetten.
Je kunt ook opdrachten maken waarmee je onderdelen op een webpagina kunt aanpassen, zoals het lettertype van de tekst op de webpagina of de snelheid waarmee een video wordt afgespeeld. Voordat je vanuit een opdracht JavaScript kunt uitvoeren, moet je de instelling inschakelen. Zie Geavanceerde privacy- en beveiligingsinstellingen in Opdrachten op de iPhone of iPad.
Zie De taak 'Voer JavaScript uit op webpagina' gebruiken in Opdrachten op de iPhone of iPad voor informatie over het gebruik van opdrachten die JavaScript uitvoeren op een webpagina.
Informatie over het ophalen van gegevens op een webpagina
Met de taak 'Voer JavaScript uit op webpagina' kun je gegevens uit een webpagina ophalen door alle elementen te pakken die aan bepaalde criteria voldoen en vervolgens deze elementen te doorlopen om een taak uit te voeren met deze gegevens (of om de elementen verder te inspecteren).
Om bijvoorbeeld een lijst te maken van elk afbeeldingselement op een webpagina, gebruik je:
var elements = document.querySelectorAll("img");
Of om bijvoorbeeld elk element op te halen met de klasse "post", gebruik je:
var elements = document.querySelectorAll(".post");
Zodra er een NodeList is aangemaakt, kun je de elementen doorlopen (om de elementen verder te filteren of toe te voegen aan een gegevensstructuur) met zoiets als:
var elements = ...;
for (let element of elements) {
// ...
}
Zie https://developer.mozilla.org/Selectors en https://developer.mozilla.org/SelectorAll voor meer informatie over het opvragen van resultaten van webpagina's.
Invoer voor de taak 'Voer JavaScript uit op webpagina'
De invoer voor de taak 'Voer JavaScript uit op webpagina' moet een actieve Safari-webpagina zijn, wat betekent dat je de opdracht moet uitvoeren vanuit het deelpaneel (specifiek vanuit Safari, SFSafariViewController of ASWebAuthenticationSession).
Wanneer een opdracht wordt uitgevoerd vanuit het deelpaneel, wordt de invoer van de Safari-app doorgegeven aan de eerste taak van je opdracht.
Hoewel de invoer voor de taak 'Voer JavaScript uit op webpagina' een Safari-webpagina moet zijn, kun je extra gegevens in de taak invoegen door gebruik te maken van magische variabelen. De opdracht voor het wijzigen van de videosnelheid (beschikbaar in de galerie) bevat bijvoorbeeld een taak 'Voer JavaScript uit op webpagina' waarmee een video op een webpagina wordt aangepast. De afspeelsnelheid van de video wordt geregeld door de variabele 'Snelheid'.
Zie Een opdracht starten vanuit een andere app op de iPhone of iPad voor informatie over het uitvoeren van Opdrachten vanuit Safari.
Uitvoer van de taak 'Voer JavaScript uit op webpagina'
Om gegevens te retourneren, moet je in JavaScript de voltooiingshandler aanroepen met bijvoorbeeld completion(result)
. Omdat JavaScript meestal wordt gebruikt met asynchrone patronen, is de aanroeping opzettelijk niet synchroon. Op deze manier kun je de taak asynchroon afronden. Het volgende is bijvoorbeeld geldig:
window.setTimeout(function() {
completion(true);
}, 1000);
De uitvoer van de taak 'Voer JavaScript uit op webpagina' is elk geldig JSON-gegevenstype, waaronder:
Tekenreeks
Getal
Booleaans (waar of onwaar)
Array (met elk ander geldig JSON-type)
Woordenboek (met elk ander geldig JSON-type)
Null
Ongedefinieerd
Voor de communicatie tussen JavaScript en de Opdrachten-app wordt de geretourneerde waarde automatisch door Opdrachten gecodeerd en gedecodeerd. Dit betekent dat je JSON.stringify(result)
niet hoeft aan te roepen voordat je de voltooiingshandler aanroept.
Omdat de retourwaarde JSON is, werken bepaalde retourwaarden niet goed. Een functie of Node heeft bijvoorbeeld geen bruikbare versie met JSON-codering. In dit geval is het aan te raden om een array of woordenboek aan te maken met de benodigde JSON-compatibele waarden.
Opmerking: Omdat een object in JavaScript gewoon een woordenboek is, kunnen basisobjecten goed worden omgezet naar JSON.
Als je geen gegevens geretourneerd wilt krijgen uit de taak 'Voer JavaScript uit op webpagina', kun je completion()
aanroepen zonder argument in de functie (omdat undefined
een geldige uitvoer is). Dit is hetzelfde als het aanroepen van completion(undefined)
.
Zie JSON gebruiken in Opdrachten op de iPhone en iPad voor meer informatie over JSON.
Zie https://developer.mozilla.org/Node voor meer informatie over Nodes.
Zie https://developer.mozilla.org/Functions voor meer informatie over functies.
Tijdslimiet voor de taak 'Voer JavaScript uit op webpagina'
Net als voor alle JavaScript-extensies in Safari geldt ook voor de taak 'Voer JavaScript uit op webpagina' een tijdslimiet. De taak moet dus zo snel mogelijk worden uitgevoerd. Dit lukt mogelijk niet als er synchrone functies in het JavaScript worden gebruikt, zoals:
window.alert()
window.prompt()
window.confirm()
Time-outs die seconden lang duren, bijvoorbeeld:
window.setTimeout(function() { completion(); }, 5000);
Als het JavaScript de tijdslimiet overschrijdt, kan de opdracht niet worden voltooid en verschijnt de foutmelding 'JavaScript-time-out' tijdens het uitvoeren van de opdracht.
Afhandelingen van syntaxis- en runtime-fouten
Je kunt elke syntaxis gebruiken die in Safari wordt ondersteund om JavaScript te schrijven in de taak 'Voer JavaScript uit op webpagina'.
In de Opdrachten-app voer je met de taak 'Voer JavaScript uit op webpagina' een simpele syntaxiscontrole uit om fouten te ontdekken voordat je de opdracht uitvoert vanuit de Safari-extensie.
Tijdens het invoeren van je script in het tekstveld, helpt de syntaxismarkering je bij het controleren van de geldigheid van je JavaScript. Als je bijvoorbeeld vergeet aanhalingstekens te gebruiken aan het einde van een tekenreeks, wordt alle tekst na die tekenreeks gemarkeerd.
Als de syntaxis van je script geldig is, maar een runtime-fout bevat, worden de uitzonderingen door de taak 'Voer JavaScript uit op webpagina' opgepikt en weergegeven. Als je script bijvoorbeeld verwijst naar een variabele of functie die niet bestaat (zoals shortcuts.completion()
), wordt er bij de uitvoering een fout weergegeven.