Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

simplest cross-browser check if protocol handler is registered

When user clicks link with custom protocol (like myapp://superlink)

I need either launch an app or allow user to download and run configuration app

I am looking for cross-browser way to check if custom protocol is registered

I've tried to determine this by checking user agent server-side (for IE)

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\User Agent\Post Platform] "myapp"=""

sends

`....NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; **myapp**` 

as user-agent

This is good, clean way, easy configuration:

just download .reg file and run it or propagiate via ms windows policy

I can't fix this for Chrome and Firefox

Are there any client-side solution (in js)?

My enviroment: IE8+, Chrome (latest), Firefox(latest)

like image 590
jonny Avatar asked Jul 16 '14 11:07

jonny


1 Answers

There is this old tricks that it always never fails me.

The core functionality that you need is setTimeout. I will tell you in detail:

setTimeout(function() {   window.location = "http://itunes.com/app/yourapplocation"; }, 200);  // once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in window.location = "myapp://superlink"; 

Now you mentioned that it maybe a link or links so I made this nice function just for your convenience:

HTML code

<a href="myapp://superlink" data-href-alt="http://itunes.com/app/yourapplocation">Click here</a> 

JS code

$("a[href*='myapp://']").click(function(e) {   var el = $(this);   setTimeout(function() {     window.location = el.data("data-href-alt");   }, 200);    // once you do the custom-uri, it should properly execute the handler, otherwise, the settimeout that you set before will kick in   window.location = el.data("href");    e.preventDefault(); }); 

Hope this will help you :)

like image 81
kororo Avatar answered Sep 30 '22 03:09

kororo