Ответ 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();
});