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

Как запустить приложения (facebook/twitter/etc) из мобильного браузера, но вернуться к гиперссылке, если приложение не установлено

Я надеюсь, что может быть какой-то способ определить, зарегистрирована ли схема uri на мобильном устройстве внутри браузера.

IE: Я бы хотел проверить, установлены ли приложения facebook, twitter, pinterest и могут быть запущены из их связанной схемы uri:

if(fb_isInstalled) {
    // href="fb://profile/...."
} else {
    // href="#" onclick="location.href='http://m.facebook.com/...'; return false;"
}

В принципе, если пользователь установил facebook, запустите приложение, но вернитесь к мобильной версии веб-сайта fb, если приложение не установлено.

4b9b3361

Ответ 1

Я думаю, что у меня есть рабочее решение.

 <!-- links will work as expected where javascript is disabled-->
 <a class="intent"   
    href="#" onclick="location.href='http://facebook.com/someProfile'; return false;"   
    data-scheme="fb://profile/10000">facebook</a>

И мой javascript работает так. Заметьте: там немного jQuery смешалось, но вам не нужно использовать его, если вы этого не хотите.

(function () {

    // tries to execute the uri:scheme
    function goToUri(uri, href) {
        var start, end, elapsed;

        // start a timer
        start = new Date().getTime();

        // attempt to redirect to the uri:scheme
        // the lovely thing about javascript is that it single threadded.
        // if this WORKS, it'll stutter for a split second, causing the timer to be off
        document.location = uri;

        // end timer
        end = new Date().getTime();

        elapsed = (end - start);

        // if there no elapsed time, then the scheme didn't fire, and we head to the url.
        if (elapsed < 1) {
            document.location = href;
        }
    }

    $('a.intent').on('click', function (event) {
        goToUri($(this).data('scheme'), $(this).attr('href'));
        event.preventDefault();
    });
})();

Я также добавил это как gist, с которым вы можете работать и работать. Вы также можете включить gist в jsfiddle, если вы этого захотите.


Изменить

@kmallea разветкил суть и радикально упростил ее. https://gist.github.com/kmallea/6784568

// tries to execute the uri:scheme
function uriSchemeWithHyperlinkFallback(uri, href) {
    if(!window.open(uri)){
        window.location = href;
    }
}
// `intent` is the class we're using to wire this up. Use whatever you like.
$('a.intent').on('click', function (event) {
    uriSchemeWithHyperlinkFallback($(this).data('scheme'), $(this).attr('href'));
    // we don't want the default browser behavior kicking in and screwing everything up.
    event.preventDefault();
});