Scriptable Tutorial Teil 4 – WebView

Von | 27.12.2020

Im ersten Teil des Scriptable Tutorials haben wir die Daten einer URL mittels eines Scriptable Requests ausgelesen:

let req = new Request(url);
let html = await req.loadString();

Der Request liefert die Rohdaten der übergebenen URL auf schnelle und effektive Weise. Allerdings interpretiert die Methode .loadString die erhaltenen Daten nicht. Insbesondere werden keine im Response enthaltenen Scripte ausgeführt. Dynamische Websites, welche Teile der Website per Script nachlesen, werden daher nur unvollständig zurückgeliefert.

Hier hilft uns nun die Klasse WebView weiter. Diese nutzt die Renderingengine von Safari, um die angeforderte URL vollständig zu laden und ggf. enthaltene dynamische Bestandteile auszuführen. Das Beispiel zum Laden einer URL mittelts WebView sieht dann wiefolgt aus:

let view = new WebView();
await view.loadURL(url);
let html = await view.getHTML();

Der Code ist tatsächlich sehr ähnlich zur Verwendung der request-Klasse, liefert aber je nach verwendeter URL ein interpretiertes Ergebnis. In der Variablen html liegen nun auch sämtliche Daten vor, welche durch Scripte nachzulesen waren.

Performance

Auf einen Nachteil bei der Verwendung von WebView sei an dieser Stelle hingewiesen: Im Hintergrund wird im Prinzip ein Browser geladen, dies verlangsamt die Ausführung deutlich. Passt Ihr das Beispiel zu Tutorial 1 an und verwendet an Stelle des Requests die Klasse WebView, werdet Ihr im Widget eine Verzögerung von einigen Sekunden feststellen, bis das die Daten des Widgets dargestellt werden. Je nach Website kommt dann das Ausführen der im Response enthaltenen Javascripte noch oben drauf.

Weitere Möglichkeiten durch WebView

Neben dem Auslesen von Requests gibt es auch die Möglichkeit, mittels WebView eine Website direkt zur Anzeige zu bringen.

Hierzu ist an Stelle von loadURL die statische Methode loadHTML zu verwenden:

WebView.loadURL("https://www.google.de")

Es öffnet sich ein Safari als Popupdialog und zeigt google an. Über zwei optionale Parameter lässt sich zum einen auch die Größe des Popups vorgeben, weiterhin lässt sich die URL auch als Vollbild öffnen.

Solltet Ihr eine HTML-Datei lokal als Datei vorliegen haben und diese zur Anzeige bringen wollen, so ist auch dies leicht möglich, hierzu findet die Methode loadFile Verwendung:

let fm = FileManager.iCloud()
let dir = fm.documentsDirectory()
let fileName = "html/index.html"
let path = fm.joinPath(dir, fileName)
WebView.loadFile(path, new Size(0, 300))
Fazit

Die Klasse WebView ermöglicht es, mit sehr wenig Aufwand Websites vollständig zu laden und bei Bedarf auch zur Anzeige zu bringen. Sind nur statische Rohdaten auszulesen, ist auf Grund der besseren Performance die Klasse Request jedoch besser geeignet.

Sollte ich mein kleines Scriptable Tutorial gefallen haben, würde ich mich über einen kleinen Einwurf in die Kaffeekasse freuen:

https://www.paypal.com/paypalme/markmescher/2,99

Wie groß der Kaffee werden soll, dürft Ihr natürlich frei entscheiden 🙂

Zum Abschluss wie immer der Hinweis auf

https://talk.automators.fm/

Es lassen sich hier hunderte Beispiele finden, die nur darauf warten, ausprobiert zu werden. Auch wird Euch hier gerne bei Problemen weitergeholfen.

Solltet Ihr Anregungen zu diesem Tutorial haben, freue ich mich über Eure Kommentare!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.