Подтвердить что ты не робот

Проверьте, поддерживается ли схема URL в javascript

Есть ли способ проверить, зарегистрирована ли в настоящее время схема URL на телефоне... с помощью javascript?

4b9b3361

Ответ 1

Нет, не с веб-страницы.

Ответ 2

Не без проблем. Но есть способ, аналогичный проверке, было ли всплывающее окно заблокировано или нет.

При попытке использовать схему URL, которая не поддерживается, Safari предупредит пользователя о том, что он не знает, что с ним делать, и оставайтесь на той же странице.

Итак, если вы дали свое приложение-вызов некоторое время для активации, скажем 300 мс, а затем сделайте что-то еще, чтобы ответить на небытие схемы.

Это не самый красивый, но он работает:

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>

Ответ 3

Вот решение, которое не отображает всплывающее окно, когда вы возвращаетесь из приложения, предполагается, что у вас больше 400 мс:

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);
}

Ответ 4

Я нашел событие pagehide более надежным, чем в зависимости от системного времени. Для тех из нас, кто предпочитает не-jQuery пользу, вот фрагмент.

  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);
  }

Ответ 5

Еще одна отличная (по крайней мере, работающая в последних версиях браузера) проблема заключается в том, чтобы проверить, имеет ли окно браузера фокус после короткого таймаута, таким образом вы можете показать диалоговое окно для пользователя, только если схема URI не работает

HTML:

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

Javascript (используя jQuery здесь):

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')); 
});​

Вот рабочий jsFiddle, просто обновите его своей собственной схемой URI: http://jsfiddle.net/mF6TZ/

Ответ 6

Начиная с iOS 6.0 Apple представила баннеры смарт-приложений, которые делают то, что большинство из нас ищет:

  • Отправляйте в App Store, если приложение не установлено.
  • Откройте приложение с определенной глубокой ссылкой, используя параметр app-argument.

Включите следующий метатег:

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

взято здесь: Руководство по веб-контенту Safari

Ответ 7

Вот вариант предыдущих двух решений. Он создаст ссылку, которую можно открыть в Google Chrome. Если он не работает, он открывает ссылку, используя 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>

Ответ 8

Это основано на ответе mrahman. Как уже отмечалось, JoshNaro новая дата() возвращает неверную дату при вызове внутри таймаута. Тесты показывают, что дата не обновляется в потоках, которые запускаются до того, как приложение будет отключено.

Еще один уродливый setTimeout, вызванный после активации, создаст новый поток с текущей датой.

Это было протестировано на iOS 8.

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);
}

Ответ 9

У меня есть комментарий fooobar.com/questions/18380/... с плагином jQuery, чтобы добавить ссылку на альтернативные ссылки на обычные ссылки.

Ответ 10

Я пытаюсь использовать только событие "pagehide", но потом оно не работает в Firefox. Я создал эту версию здесь http://jsfiddle.net/thiagomata/6tvoc4f1/2/, что работает в Firefox, Google Chrome и Safari. Я еще не тестировал в Internet Explorer.

Одна вещь, необходимая для работы в Firefox, - это использование Iframe для установки src. Это позволяет мне вызвать приложение, не выходя из моей страницы.

<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>