Frage

Gibt es eine Möglichkeit zu überprüfen, ob ein URL-Schema zur Zeit am Telefon registriert ist ... mit Javascript?

War es hilfreich?

Lösung

Nein, nicht von einer Webseite.

Andere Tipps

Nicht nahtlos. Aber es gibt eine Möglichkeit, ähnlich wie die Überprüfung, ob ein Pop-up blockiert wurde oder nicht.

Wenn Sie ein URL-Schema versuchen, die nicht unterstützt wird, Safari wird den Benutzer warnen, dass sie nicht weiß, was mit ihm zu tun und auf der gleichen Seite bleiben.

Wenn Sie also geben App-Aufruf einige Zeit, aktivieren 300 ms sagen, und dann sonst etwas zu tun, um die Nicht-Existenz des Systems reagieren zu können.

Es ist nicht die schönste, aber es funktioniert:

function startIThrown(){
  document.location = 'ithrown://restart';
  setTimeout(function(){
    if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
      document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
    }
  }, 300);
}

<a href="#" onclick="startIThrown()">Restart iThrown</a>

Hier ist eine Lösung, die nicht das Popup nicht anzeigen, wenn Sie aus der App zurückkommen, nimmt man länger gegangen ist als 400 ms:

function startiThrown() {
    document.location = appurl;
    var time = (new Date()).getTime();
    setTimeout(function(){
        var now = (new Date()).getTime();

        if((now - time)<400) {
            if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
            document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
            }
         }
    }, 300);
}

I pagehide Veranstaltung gefunden robuster zu sein als auf Systemzeit abhängig. Für diejenigen von uns, die einen nicht-jQuery Gefallen vorzieht, hier ist der Code-Schnipsel.

  var appurl = 'custom://url';
  var appstore = 'https://itunes.apple.com/us/app/your-app';

  var timeout;
  function preventPopup() {
    clearTimeout(timeout);
    timeout = null;
    window.removeEventListener('pagehide', preventPopup);
  }
  function startApp() {
    window.location = appurl;
    timeout = setTimeout(function(){
      if(confirm('You do not seem to have the App installed, do you want to go download it now?')){
        document.location = appstore;
      }
    }, 1000);
    window.addEventListener('pagehide', preventPopup);
  }

Ein weiterer großer (zumindest arbeiten in aktuellen Browser-Versionen) Abhilfe zu überprüfen ist, wenn das Browserfenster nach einem kurzen Timeout Fokus hat, auf diese Weise nur ein Dialogfeld für den Benutzer anzeigen kann, wenn die URI-Schema funktionierte nicht

HTML:

<a class="uri-link" data-uri="qobuzapp://" href="#">URI</a>​

Javascript (mit jQuery hier):

var windowHasFocus;

$(window).focus(function() {
  windowHasFocus = true;
}).blur(function() {
  windowHasFocus = false;
});

function goToUri(uri) {
  window.location = uri;
  setTimeout(function(){
    if (windowHasFocus) {
      if (confirm('You do not seem to have Qobuz installed, do you want to go download it now?')){
        window.location = 'http://www.qobuz.com';
      }
    }
  }, 100);
}

$('a').on('click', function(){ 
  goToUri($(this).data('uri')); 
});​

Hier ist ein funktionierendes jsFiddle, aktualisieren Sie es einfach mit Ihrem eigenen URI-Schema: http://jsfiddle.net/mF6TZ/

Ab iOS 6.0 von Apple präsentiert die Smart-App-Banner, die das tun, was die meisten von uns suchen:

  • In dem App Store, wenn die App nicht installiert ist.
  • Öffnen Sie die App mit einem bestimmten Deep-Link, die App-Argument param verwenden.

Fügen Sie den folgenden Meta-Tag:

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

von hier genommen: Safari Web HotPicks

Hier ist eine Variation auf den vorherigen 2 Lösungen. Es wird eine Verknüpfung erstellen, die in Google Chrome geöffnet werden kann. Wenn es fehlschlägt es öffnet sich über den Link http

<script>
 function checkChrome(h){
  document.location=h;
  var time = (new Date()).getTime();
  setTimeout(function(){
   var now = (new Date()).getTime();
   if((now-time)<400) {
    if(confirm('Missing Chrome. Download it now?')){
     document.location = 'http://itunes.apple.com/us/app/chrome/id535886823?mt=8';
    } else {
     document.location=h.replace('googlechrome','http');
    }
   }
  }, 300);
 }
</script>

<a href="googlechrome://www.google.com" onclick="checkChrome(this.href);return false;">Open Google with Chrome</a>

Dies wird auf die Antwort von mrahman basiert. Wie bereits erwähnt, durch JoshNaro new Date () gibt ein falsches Datum zurück, wenn innerhalb des Timeout genannt. Tests legen nahe, dass das Datum nicht in Threads aktualisiert wird, die gestartet werden, bevor die App deaktiviert wird.

Eine weiterer hässliche SetTimeout nach der Aktivierung genannt wird einen neuen Thread mit dem aktuellen Datum erstellt werden.

Dieses wurde auf iOS 8 getestet.

function startiThrown() {
    document.location = appurl;
    var time = (new Date()).getTime();
    setTimeout(function(){
        setTimeout(function(){ // <-- start new thread after activation
            var now = (new Date()).getTime();
            if((now - time)<400) {
                if(confirm('You do not seem to have iThrown installed, do you want to go download it now?')){
                    document.location = 'http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=293049283&mt=8&uo=6';
                }
            }
        }, 10); // <-- start new thread after activation
    }, 300);
}

Ich versuche einfach, die ‚pagehide‘ Ereignis zu verwenden, aber dann funktioniert es nicht in Firefox. Ich habe diese Version hier http://jsfiddle.net/thiagomata/6tvoc4f1/2/ was funktioniert in Firefox, Google Chrome und Safari. Ich habe noch nicht in Internet Explorer getestet.

Eine Sache, was notwendig war, um es in Firefox funktioniert, war die Verwendung Iframe das src einzustellen. Dies ermöglicht es mir die App aufrufen, ohne meine Seite zu verlassen.

<a class="uri-link" href="#" 
  data-uri-app="myapp://" 
  data-url-app-not-found="http://www.google.com?q=not-found-link"
  >
  Example 1
</a>​
<a class="uri-link" href="#" 
  data-uri-app="myapp://" 
  data-url-app-not-found="http://www.google.com?q=not-found-link"
  data-url-app-found="http://www.google.com?q=found-link"
  >
  Example 2
</a>​
<a class="uri-link"  href="#"
  data-uri-app="notexists://" 
  data-url-app-not-found="http://www.google.com?q=not-exists"
>
  Example 3
</a>​
<iframe id="callapp" style="display:none"></iframe>

Ich habe diesen Kommentar https://stackoverflow.com/a/18715513/49114 mit einer jQuery-Plugin hinzufügen alternativer App-Link zu regelmäßigen Verbindungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top