64

URLスキームが現在電話に登録されているかどうかを確認する方法はありますか.javascriptを使用していますか?

4

10 に答える 10

61

シームレスではありません。ただし、ポップアップがブロックされているかどうかを確認するのと同様の方法があります。

サポートされていない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>
于 2009-09-10T11:10:52.463 に答える
37

これは、アプリから戻ったときにポップアップを表示しないソリューションです。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);
}
于 2011-07-06T16:23:56.627 に答える
13

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);
  }
于 2013-02-05T11:25:52.563 に答える
8

もう 1 つの優れた (少なくとも最新のブラウザー バージョンでは機能する) 回避策は、短いタイムアウトの後にブラウザー ウィンドウにフォーカスがあるかどうかを確認することです。これにより、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')); 
});​
于 2012-09-20T18:51:29.950 に答える
8

iOS 6.0 から、Apple は Smart App Banners を発表しました。これは、私たちのほとんどが探しているものです。

  • アプリがインストールされていない場合は、App Store に送信します。
  • app-argument パラメータを使用して、特定のディープ リンクでアプリを開きます。

次のメタ タグを含めます。

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

ここからの抜粋: Safari Web コンテンツ ガイド

于 2013-08-29T13:05:06.797 に答える
2

これは、前の 2 つのソリューションのバリエーションです。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>
于 2012-07-12T01:27:29.703 に答える
2

いいえ、ウェブページからではありません。

于 2009-03-09T20:39:48.233 に答える
1

これはmrahmanの答えに基づいています。前述のように、JoshNaro new Date()は、タイムアウト内に呼び出されると間違った日付を返します。テストでは、アプリが非アクティブ化される前に開始されたスレッドで日付が更新されないことが示唆されています。

アクティブ化後に呼び出されるさらに醜い 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);
}
于 2015-04-30T09:30:45.977 に答える
0

「pagehide」イベントだけを使用しようとしましたが、Firefox では機能しません。ここでこのバージョンを作成しましたhttp://jsfiddle.net/thiagomata/6tvoc4f1/2/ Firefox、Google Chrome、およびSafariで機能するもの。Internet Explorer ではまだテストしていません。

Firefox で動作させるために必要なことの 1 つは、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>
于 2014-08-22T23:09:58.560 に答える
0

このコメントhttps://stackoverflow.com/a/18715513/49114には、代替アプリ リンクを通常のリンクに追加する jQuery プラグインが含まれています。

于 2013-09-10T09:47:51.400 に答える