تحقق مما إذا كان عنوان URL مخطط معتمد في جافا سكريبت

StackOverflow https://stackoverflow.com/questions/627916

سؤال

هل هناك أي طريقة لمعرفة ما إذا كان عنوان URL مخطط حاليا مسجلة على الهاتف...مع جافا سكريبت ؟

هل كانت مفيدة؟

المحلول

لا، ليس من صفحة ويب.

نصائح أخرى

وليس بسلاسة. ولكن هناك طريقة مشابهة لفحص إذا تم حجب نافذة منبثقة أو لا.

وعند محاولة مخطط URL غير معتمدة، وسفاري تحذير المستخدم أنه لا يعرف ماذا يفعل معها والبقاء على نفس الصفحة.

وحتى إذا ما قدمتموه التطبيق، استدعاء الطبيب بعض الوقت لتفعيل، ويقول 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>

وهنا هو الحل الذي لا تظهر منبثقة عندما كنت أعود من التطبيق، فإنه يفترض كنت قد ذهبت أطول من 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);
}

ولقد وجدت الحدث 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>​

وجافا سكريبت (باستخدام مسج هنا):

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.0 قدمت شركة آبل الذكية التطبيق اللافتات التي تفعل ما معظمنا تبحث عن:

  • إرسال إلى المتجر إذا كان التطبيق ليس مثبتا.
  • فتح التطبيق محددة الارتباط العميق باستخدام التطبيق حجة المعلمة.

وتشمل العلامة الوصفية التالية:

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

مأخوذة من هنا:سفاري المحتوى على شبكة الإنترنت دليل

وهنا هو الاختلاف على الحلول السابقة 2. فإنه سيتم إنشاء رابط التي يمكن فتحها في جوجل كروم. إذا فشل فإنه يفتح الارتباط باستخدام 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 new Date() يعيد تاريخ خاطئ عندما دعا داخل المهلة.الاختبارات تشير إلى أن التاريخ لا يتم تحديث في المواضيع التي بدأت قبل التطبيق هو إبطال مفعولها.

المزيد من القبيح setTimeout يسمى بعد تفعيل إنشاء موضوع جديد مع التاريخ الحالي.

هذا كان اختبار على دائرة الرقابة الداخلية 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" حدث، ولكن بعد ذلك لا تعمل في فايرفوكس. أنا خلقت هذا الإصدار هنا http://jsfiddle.net/thiagomata/6tvoc4f1/2/ ما يعمل في فايرفوكس وجوجل كروم وسفاري. أنا لم تختبر في Internet Explorer بعد.

وشيء واحد ما هو ضروري لجعله يعمل في فايرفوكس، واستخدام الإطار من لضبط 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 مع البرنامج المساعد مسج لإضافة البديل التطبيق تصل إلى الروابط العادية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top