{"id":4861,"date":"2012-11-09T23:26:28","date_gmt":"2012-11-09T22:26:28","guid":{"rendered":"http:\/\/notizblog.org\/?p=4861"},"modified":"2020-03-27T12:51:49","modified_gmt":"2020-03-27T11:51:49","slug":"custom-web-schemes","status":"publish","type":"post","link":"https:\/\/notiz.blog\/2012\/11\/09\/custom-web-schemes\/","title":{"rendered":"web+custom:\/\/scheme"},"content":{"rendered":"\n<p>Ich habe in den letzten Monaten eine Menge \u00fcber <em><a href=\"https:\/\/notiz.blog\/2012\/05\/21\/web-intents-die-losung-fur-das-nascar-problem\/\">Web Intents<\/a><\/em> gelesen und ich finde immer noch dass der <a href=\"https:\/\/web.archive.org\/web\/20160318164905\/http:\/\/www.webmonkey.com\/2012\/05\/webkit-offers-early-preview-of-web-intents\/\">Webmonkey<\/a> die Thematik bisher am treffendsten beschrieben hat:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n    <p>In practice Web Intents work a bit like <code>mailto:<\/code> links, defining an action and then passing it along to the browser, which allows the user to choose how to handle the action. The difference is that instead of opening a desktop app, Web Intents connect to web services.<\/p>\n<\/blockquote>\n\n\n\n<p>Der Vergleich ist simple und ich habe mir die Frage gestellt: Wieso nicht einfach wirklich unterschiedliche Schemes f\u00fcr die jeweiligen Anforderungen definieren? Eine App kann beim Browser anmelden dass sie <code>share:\/\/<\/code> oder <code>subscribe:\/\/<\/code> unterst\u00fctzt und bei einem Klick auf einen entsprechenden Link, \u00f6ffnet sich (statt der E-Mail App) eben die entsprechende Web-App.<\/p>\n\n\n\n<p>&#8230;vor kurzem hab ich dann mal ein wenig mit <a href=\"http:\/\/superfeedr.com\">Superfeedrs<\/a> <a href=\"https:\/\/web.archive.org\/web\/20121109202636\/http:\/\/www.msgboy.com\/\">msgboy<\/a> herumgespielt und entdeckt dass es bei HTML5 wirklich <a href=\"http:\/\/www.whatwg.org\/specs\/web-apps\/current-work\/multipage\/timers.html#custom-handlers\">Custom-Schemes<\/a> gibt die man frei definieren kann!<\/p>\n\n\n\n<p>Mit folgendem Befehl kann man beim Browser einen eigenen Protocol-Handler setzen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">navigator.registerProtocolHandler(<span class=\"hljs-string\">'web+share'<\/span>, <span class=\"hljs-string\">'http:\/\/spread.ly\/?url=%s'<\/span>, <span class=\"hljs-string\">'Spread.ly'<\/span>);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Alle neuen Schemes sollten mit &quot;<code>web+<\/code>&quot; beginnen, ausnahmen sind schon bestehende Schemes, wie z.B. &quot;<code>mailto<\/code>&quot;, &quot;<code>mms<\/code>&quot;, &quot;<code>nntp<\/code>&quot;, &quot;<code>rtsp<\/code>&quot; oder &quot;<code>webcal<\/code>&quot;.<\/p>\n\n\n\n<p>Der passende a-Tag zum oben genannten Beispiel m\u00fcsste also folgenderma\u00dfen aussehen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"web+share:http:\/\/pfefferle.org\"<\/span>&gt;<\/span>Share this Page<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Klickt ein User den Link, wird einfach das <code>%s<\/code> vom Handler mit dem <code>href<\/code> ersetzt und aufgerufen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">http:<span class=\"hljs-comment\">\/\/spread.ly\/?url=web+share:http:\/\/pfefferle.org<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Bisher war ich ja ein gro\u00dfer <em>Web Intents<\/em> Fan (und bin es auch immer noch), aber f\u00fcr solche simplen Aktionen wie &quot;Share&quot;, &quot;Like&quot;, &quot;Subscribe&quot; oder &quot;Follow&quot; reicht doch ein simples Custom-Scheme vollkommen aus. Kein unn\u00f6tiges JavaScript (mal abgesehen vom Registrieren des Handlers), nur ein wenig HTML. Gro\u00dfartig!<\/p>\n\n\n\n<p>Protocol-Handler lassen sich \u00fcbrigens auch abh\u00e4ngig vom Mime-Type setzen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">navigator.registerContentHandler(<span class=\"hljs-string\">'application\/atom+xml'<\/span>, <span class=\"hljs-string\">'http:\/\/www.google.com\/ig\/add?feedurl=%s'<\/span>, <span class=\"hljs-string\">'Google Reader'<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Bei allen Web-Dokumenten mit dem Mime-Type <code>application\/atom+xml<\/code> sollte der Browser jetzt nachfragen ob er die URL mit dem Google-Reader \u00f6ffnen soll.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe in den letzten Monaten eine Menge \u00fcber Web Intents gelesen und ich finde immer noch dass der Webmonkey die Thematik bisher am treffendsten beschrieben hat: In practice Web Intents work a bit like mailto: links, defining an action and then passing it along to the browser, which allows the user to choose how [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"webmentions_disabled_pings":false,"webmentions_disabled":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":""},"categories":[2],"tags":[5171,700,309,152,968],"class_list":{"0":"post-4861","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-web","7":"tag-fediblog","8":"tag-html5","9":"tag-javascript","10":"tag-scheme","11":"tag-web-intents","12":"h-entry","13":"hentry"},"_links":{"self":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/4861","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/comments?post=4861"}],"version-history":[{"count":0,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/posts\/4861\/revisions"}],"wp:attachment":[{"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/media?parent=4861"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/categories?post=4861"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/notiz.blog\/wp-api\/wp\/v2\/tags?post=4861"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}