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

Простейшая кросс-браузерная проверка регистрации протокола

Когда пользователь нажимает ссылку на собственный протокол (например, myapp://superlink)

Мне нужно либо запустить приложение, либо разрешить пользователю загружать и запускать конфигурационное приложение

Я ищу кросс-браузерный способ проверить, зарегистрирован ли пользовательский протокол

Я попытался определить это, проверив сервер пользователя на стороне сервера (для IE)

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Настройки\5.0\Пользовательский агент\Почтовая платформа] "myapp" = ""

посылает

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

как пользовательский агент

Это хороший, чистый способ, простая конфигурация:

просто загрузите файл .reg и запустите его или пропустите через политику windows ms

Я не могу исправить это для Chrome и Firefox

Есть ли клиентское решение (в js)?

My enviroment: IE8 +, Chrome (последняя версия), Firefox (последняя версия)

4b9b3361

Ответ 1

Это старые трюки, которые всегда меня не терпят.

Основная функциональность, которая вам нужна, - setTimeout. Я расскажу вам подробно:

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";

Теперь вы упомянули, что это, возможно, ссылка или ссылки, поэтому я сделал эту приятную функцию только для вашего удобства:

HTML-код

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

JS-код

$("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();
});

Надеюсь, это поможет вам :)

Ответ 2

У меня была аналогичная проблема, когда мне нужно было проверить, зарегистрирован ли пользовательский протокол (который откроет исполняемый файл), или иначе открыть страницу загрузки или сделать что-то еще. К сожалению, нет простого способа справиться с этим, поскольку каждый браузер ведет себя по-разному. Я попытался собрать всю информацию и придумать довольно общую библиотеку по этому вопросу, вы можете взглянуть на:

https://github.com/ismailhabib/custom-protocol-detection

ps: решение для не Windows 8 IE довольно уродливо, но я не мог найти лучшего решения.

Ответ 3

Решение kororo для меня не сработало по какой-то причине, поэтому мне удалось это немного модифицированное решение.

<html>
<a id="link">Click Me</a>
<script>
var link = document.getElementById('link');
var timeout;
window.addEventListener('blur',function(e){
    window.clearTimeout(timeout);
})

link.addEventListener('click', function(e) { 

    timeout = window.setTimeout(function() {
      console.log('timeout');
      window.location = "https://myapp.net";
    }, 1000);

    window.location = "myapp://";
    e.preventDefault();
});
</script>
</html>

Ответ 4

Обновление для ответа Короно, это сработало для меня:

$(function() {
    var timeIndex;
    $("a[href*='myapp://']").blur(function(e)
    {
        clearTimeout(timeIndex);
    });

    $("a[href*='myapp://']").click(function(e)
    {
      var el = $(this);
      timeIndex = setTimeout(function() {
        window.location = el.attr("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.attr("href");
      e.preventDefault();
    });
});

Ответ 5

селям

Установите ismailhabib/пользовательский протокол обнаружения

Включая этот файл JS protocolcheck.js

Затем напишите код примерно так

<div id="protocol" href="myprotocol:[email protected]">Check Protocol</div>

<script>
        $("#protocol").click(function (event) {
            protocolCheck($(this).attr("href"), function () {
                    alert("protocol not recognized");
                });
            event.preventDefault ? event.preventDefault() : event.returnValue = false;
        });
</script>