{"id":187,"date":"2020-12-27T12:23:11","date_gmt":"2020-12-27T12:23:11","guid":{"rendered":"https:\/\/www.unleserlich.info\/?p=187"},"modified":"2021-01-03T13:04:51","modified_gmt":"2021-01-03T13:04:51","slug":"scriptable-tutorial-teil-4-webview","status":"publish","type":"post","link":"https:\/\/www.unleserlich.info\/?p=187","title":{"rendered":"Scriptable Tutorial Teil 4 &#8211; WebView"},"content":{"rendered":"\n<p>Im ersten Teil des Scriptable Tutorials haben wir die Daten einer URL mittels eines Scriptable Requests ausgelesen:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let req = new Request(url);\nlet html = await req.loadString();<\/code><\/pre>\n\n\n\n<p>Der Request liefert die Rohdaten der \u00fcbergebenen URL auf schnelle und effektive Weise. Allerdings interpretiert die Methode .loadString die erhaltenen Daten nicht. Insbesondere werden keine im Response enthaltenen Scripte ausgef\u00fchrt. Dynamische Websites, welche Teile der Website per Script nachlesen, werden daher nur unvollst\u00e4ndig zur\u00fcckgeliefert.<\/p>\n\n\n\n<p>Hier hilft uns nun die Klasse WebView weiter. Diese nutzt die Renderingengine von Safari, um die angeforderte URL vollst\u00e4ndig zu laden und ggf. enthaltene dynamische Bestandteile auszuf\u00fchren. Das Beispiel zum Laden einer URL mittelts WebView sieht dann wiefolgt aus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let view = new WebView();\nawait view.loadURL(url);\nlet html = await view.getHTML();<\/code><\/pre>\n\n\n\n<p>Der Code ist tats\u00e4chlich sehr \u00e4hnlich zur Verwendung der request-Klasse, liefert aber je nach verwendeter URL ein interpretiertes Ergebnis. In der Variablen html liegen nun auch s\u00e4mtliche Daten vor, welche durch Scripte nachzulesen waren. <\/p>\n\n\n\n<h5>Performance<\/h5>\n\n\n\n<p>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\u00fchrung deutlich. Passt Ihr das Beispiel zu Tutorial 1 an und verwendet an Stelle des Requests die Klasse WebView, werdet Ihr im Widget eine Verz\u00f6gerung von einigen Sekunden feststellen, bis das die Daten des Widgets dargestellt werden. Je nach Website kommt dann das Ausf\u00fchren der im Response enthaltenen Javascripte noch oben drauf.<\/p>\n\n\n\n<h5>Weitere M\u00f6glichkeiten durch WebView<\/h5>\n\n\n\n<p>Neben dem Auslesen von Requests gibt es auch die M\u00f6glichkeit, mittels WebView eine Website direkt zur Anzeige zu bringen.<\/p>\n\n\n\n<p>Hierzu ist an Stelle von loadURL die statische Methode loadHTML zu verwenden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>WebView.loadURL(\"https:\/\/www.google.de\")<\/code><\/pre>\n\n\n\n<p>Es \u00f6ffnet sich ein Safari als Popupdialog und zeigt google an. \u00dcber zwei optionale Parameter l\u00e4sst sich zum einen auch die Gr\u00f6\u00dfe des Popups vorgeben, weiterhin l\u00e4sst sich die URL auch als Vollbild \u00f6ffnen.<\/p>\n\n\n\n<p>Solltet Ihr eine HTML-Datei lokal als Datei vorliegen haben und diese zur Anzeige bringen wollen, so ist auch dies leicht m\u00f6glich, hierzu findet die Methode loadFile Verwendung:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let fm = FileManager.iCloud()\nlet dir = fm.documentsDirectory()\nlet fileName = \"html\/index.html\"\nlet path = fm.joinPath(dir, fileName)\nWebView.loadFile(path, new Size(0, 300))<\/code><\/pre>\n\n\n\n<h5>Fazit<\/h5>\n\n\n\n<p>Die Klasse WebView erm\u00f6glicht es, mit sehr wenig Aufwand Websites vollst\u00e4ndig 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.<\/p>\n\n\n\n<p>Sollte ich mein kleines Scriptable Tutorial gefallen haben, w\u00fcrde ich mich \u00fcber einen kleinen Einwurf in die Kaffeekasse freuen:<\/p>\n\n\n\n<p><a href=\"https:\/\/www.paypal.com\/paypalme\/markmescher\/2,99\">https:\/\/www.paypal.com\/paypalme\/markmescher\/2,99<\/a><\/p>\n\n\n\n<p>Wie gro\u00df der Kaffee werden soll, d\u00fcrft Ihr nat\u00fcrlich frei entscheiden \ud83d\ude42<\/p>\n\n\n\n<p>Zum Abschluss wie immer der Hinweis auf<\/p>\n\n\n\n<p><a href=\"https:\/\/talk.automators.fm\/\">https:\/\/talk.automators.fm\/<\/a><\/p>\n\n\n\n<p>Es lassen sich hier hunderte Beispiele finden, die nur darauf warten, ausprobiert zu werden. Auch wird Euch hier gerne bei Problemen weitergeholfen.<\/p>\n\n\n\n<p>Solltet Ihr Anregungen zu diesem Tutorial haben, freue ich mich \u00fcber Eure Kommentare!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im ersten Teil des Scriptable Tutorials haben wir die Daten einer URL mittels eines Scriptable Requests ausgelesen: Der Request liefert die Rohdaten der \u00fcbergebenen URL auf schnelle und effektive Weise. Allerdings interpretiert die Methode .loadString die erhaltenen Daten nicht. Insbesondere werden keine im Response enthaltenen Scripte ausgef\u00fchrt. Dynamische Websites, welche Teile der Website per Script\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.unleserlich.info\/?p=187\">Weiterlesen &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":112,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"twitterCardType":"","cardImageID":0,"cardImage":"","cardTitle":"","cardDesc":"","cardImageAlt":"","cardPlayer":"","cardPlayerWidth":0,"cardPlayerHeight":0,"cardPlayerStream":"","cardPlayerCodec":""},"categories":[16,19],"tags":[11,9,15,14,12,17,10,28],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/posts\/187"}],"collection":[{"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=187"}],"version-history":[{"count":2,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/posts\/187\/revisions"}],"predecessor-version":[{"id":237,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/posts\/187\/revisions\/237"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=\/wp\/v2\/media\/112"}],"wp:attachment":[{"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=187"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=187"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unleserlich.info\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=187"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}