문제

현재 휴대폰에 URL Scheme이 등록되어 있는지 확인할 수 있는 방법이 있나요?자바스크립트로?

도움이 되었습니까?

해결책

아니요, 웹 페이지가 아닙니다.

다른 팁

원활하게는 아닙니다. 그러나 팝업이 차단되었는지 여부를 확인하는 것과 비슷한 방법이 있습니다.

지원되지 않는 URL 체계를 시도하면 Safari는 사용자에게 무엇을 해야할지 모르고 같은 페이지에 머물러 있다고 경고합니다.

따라서 App-Call에 300ms를 활성화하고 계획의 존재하지 않는 것에 응답하기 위해 다른 일을 할 시간을 주었다.

가장 예쁘지는 않지만 작동합니다.

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>

다음은 앱에서 돌아올 때 팝업을 표시하지 않는 솔루션입니다. 400ms 이상이되었다고 가정합니다.

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

나는 찾았다 pagehide 시스템 시간에 의존하는 것보다 더 강력한 이벤트. 쿼리가 아닌 호의를 선호하는 사람들에게는 스 니펫이 있습니다.

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

또 다른 훌륭한 해결 방법(최소한 최신 브라우저 버전에서 작동)은 짧은 시간 초과 후 브라우저 창에 포커스가 있는지 확인하는 것입니다. 이렇게 하면 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/

iOS 6.0부터 Apple은 우리 대부분이 찾고있는 일을하는 스마트 앱 배너를 발표했습니다.

  • 앱이 설치되지 않은 경우 App Store로 전송하십시오.
  • 응용 프로그램 매개 변수를 사용하여 특정 딥 링크로 앱을 엽니 다.

다음 메타 태그를 포함하십시오.

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

여기에서 가져온 것 :사파리 웹 컨텐츠 가이드

다음은 이전 두 솔루션의 변형입니다. 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>

이것은 Mrahman의 답변을 기반으로합니다. 언급 한 바와 같이, Joshnaro에 의해 새로운 날짜 () 타임 아웃 내부에서 호출 될 때 잘못된 날짜를 돌려줍니다. 테스트에 따르면 앱이 비활성화되기 전에 시작된 스레드에서 날짜가 업데이트되지 않음을 시사합니다.

Activation 이후에 호출 된 더 추악한 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);
}

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

이 의견이 있습니다 https://stackoverflow.com/a/18715513/49114 jQuery 플러그인을 사용하여 일반 링크에 대체 앱 링크를 추가합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top