anjoschu: Protokoll-/URI-Schema-Unterstützung per JavaScript prüfen

Hallo,

ich suche eine Möglichkeit, per JavaScript herauszufinden, ob der Browser ein bestimmtes URI-Schema ("meinschema:xyz", vergleichbar z.B. mit "skype:xy") unterstützt.

Die Anwendung ist, dass der Kunde soll von der Web-Seite aus ein lokales Programm öffnen können soll. Das geht ja prinzipiell erst mal einfach durch ein
<a href="meinschema:blablubb">Programm Öffnen</a>.

Wenn aber der Kunde das Programm nicht installiert hat, wurde auch das Schema "meinschema" nicht registriert und damit kennt der Browser das Schema "meinschema" nicht. In dem Fall soll statt des Programms ein Kontaktformular aufgehen. Ich habe mich dazu ins onclick des Linkankers gehängt. Der Klickhandler soll prüfen, ob des Schema unterstützt wird und im Negativfall statt meiner Spezial-URI das Formular aufrufen. Das Ganze sollte in etwa so aussehen:

...
<a href="meinschema:blablubb" onclick="openSchema(this.href);return false;">
     Programm Öffnen
</a>
...

function openSchema(href)
{
    if ( /* Protokoll meinschema wird unterstützt */ ) {
        window.location.href = href;
    }
    else {
        window.location.href = "fallbackformular.html";
    }
}

Ich habe schon als Workaround versucht, meinen Link per JavaScript in einem versteckten iFrame zu öffnen, und anschließend zu versuchen zu prüfen, ob das Öffnen geklappt hat. Leider verhalten sich die Browser dabei äußerst unterschiedlich, das macht die Erfolgsprüfung ziemlich haarig und nicht gerade Browserübergreifend (Firefox wirft eine Exception bei Misserfolg, IE verbietet bei Erfolg den Zugriff auf die iframe-location, etc.)

Idealerweise möchte ich keine sichtbare Browser-Fehlermeldung bei Nicht-Unterstützung des URI-Schemas "meinschema."

Mit ActiveX ginge es im IE, aber das ist leider keine optimale Lösung, weil das Ganze auch im Firefox funktionieren soll.

Danke und schöne Grüße
Andreas

  1. Hallo,

    Idealerweise möchte ich keine sichtbare Browser-Fehlermeldung bei Nicht-Unterstützung des URI-Schemas "meinschema."

    Schon mit try - catch versucht? Das ist doch die übliche Art der Fehlerbehandlung in javascript.

    Gruß, Don P

    1. Don P, danke für Deine Antwort.

      Idealerweise möchte ich keine sichtbare Browser-Fehlermeldung bei Nicht-Unterstützung des URI-Schemas "meinschema."

      Schon mit try - catch versucht? Das ist doch die übliche Art der Fehlerbehandlung in javascript.

      Habe ich versucht. Leider fange ich damit nur reine JavaScript-Exceptions. Aber wenn ich location.href setze und das URI-Schema nicht unterstützt wird, verhalten sich die Browser sehr uneinheitlich. Beim IE6 z.B. wird aber gar keine fangbare Exception geworfen, sondern es erscheint einfach die Fehlerseite "...konnte nicht geladen werden." Beim Firefox wird eine Exception geworfen, aber auch wenn ich diese abfange und verschlucke, zeigt der Browser trotzdem ein Dialogfenster mit einer Fehlermeldung.