Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to launch apps (facebook/twitter/etc) from mobile browser but fall back to hyperlink if the app isn't installed

Tags:

I am hoping there might be some way of detecting whether or not an uri:scheme is registered on a mobile device from within the browser.

IE: I'd like to check if the facebook, twitter, pinterest apps are installed and can be launched from their associated uri:scheme.

if(fb_isInstalled) {     // href="fb://profile/...." } else {     // href="http://m.facebook.com/..." } 

Basically if the user has installed facebook, then launch the app, but fall back to the mobile version of the fb website if the app is not installed.

like image 748
Chase Florell Avatar asked Dec 03 '12 00:12

Chase Florell


People also ask

How can I make Facebook page link opens in-app instead of browser?

5 – Scroll down and tap Media. 6 – Scroll down top the “Links open externally” setting and check that box. That's all there is to it. From now on the Facebook app will load all external links in your device's default web browser instead of the slimmed-down (and very nosey) in-app browser.

When I click a Facebook link posted in WhatsApp it opens in browser instead of Facebook app?

There is nothing to change in the settings of Facebook app. Just go to the app's option in apps management of (android browser or chrome) and clear the defaults. You are done. How do I add a WhatsApp link to the about section of a Facebook page?


1 Answers

I think I've got a working solution.

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

And my javascript works like this.
note: there's a little jQuery mixed in there, but you don't need to use it if you don't want to.

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

I also threw this up as a gist that you can fork and mess with. You can also include the gist in a jsfiddle if you so choose.


Edit

@kmallea forked the gist and radically simplified it. 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(); }); 
like image 56
Chase Florell Avatar answered Sep 24 '22 11:09

Chase Florell