Как обнаружить обработчиков протокола браузера?

Поскольку проект имеет gitlab-ci.yml вместо .gitlab-ci.yml, gitlab-runner пропускает мой конфигурационный файл и использует конфигурацию по умолчанию, которая запускает команду docker, в то время как я устанавливаю executor для shell. имя моего файла не начинается с "." , gitlab-runner игнорирует мой конфиг.

77
задан Dan Lew 7 May 2009 в 20:14
поделиться

7 ответов

Это не тривиальная задача; Одним из вариантов может быть использование подписанного кода, который вы можете использовать для доступа к реестру и / или файловой системе (обратите внимание, что это очень дорогой вариант ). Также нет унифицированного API или спецификации для подписи кода, поэтому вам потребуется сгенерировать определенный код для каждого целевого браузера. Кошмар поддержки.

Кроме того, я знаю, что Steam , система доставки игрового контента, похоже, тоже не решила эту проблему.

0
ответ дан 24 November 2019 в 10:58
поделиться

This would be a very, very hacky way to do this... but would this work?

  • Put the link in as normal...
  • But attach an onclick handler to it, that sets a timer and adds an onblur handler for the window
  • (in theory) if the browser handles the link (application X) will load stealing the focus from the window...
  • If the onblur event fires, clear the timer...
  • Otherwise in 3-5seconds let your timeout fire... and notify the user "Hmm, looks like you don't have the Mega Uber Cool Application installed... would you like to install it now? (Ok) (Cancel)"

Far from bulletproof... but it might help?

32
ответ дан 24 November 2019 в 10:58
поделиться

Вы говорите, что вам нужно обнаружить обработчики протоколов браузера - правда ли?

Что, если бы вы сделали что-то вроде того, что происходит, когда вы загружаете файл из sourceforge? Допустим, вы хотите открыть myapp: // something. Вместо того, чтобы просто создавать ссылку на нее, создайте ссылку на другую HTML-страницу, доступ к которой осуществляется через HTTP. Затем на этой странице скажите, что вы пытаетесь открыть для них приложение. Если это не сработает, им необходимо установить ваше приложение, что они могут сделать, нажав на предоставленную вами ссылку. Если это сработает, значит, все готово.

3
ответ дан 24 November 2019 в 10:58
поделиться

Похоже, что нет простого способа с помощью javascript обнаружить наличие установленного приложения, которое зарегистрировало обработчик протокола.

В модели iTunes Apple предоставляет URL-адреса своим серверам, которые затем предоставьте страницы, на которых выполняется некоторый javascript:

http://ax.itunes.apple.com/detection/itmsCheck.js

Таким образом, установщик iTunes, по-видимому, развертывает плагины для основных браузеров, присутствие которых затем можно обнаружить.

Если ваш плагин установлен, вы можете быть уверены, что перенаправление на URL-адрес вашего приложения будет успешным.

13
ответ дан 24 November 2019 в 10:58
поделиться

Какие швы Самое простое решение - спросить пользователя в первый раз.

Использование диалогового окна подтверждения JavaScript в Примере:

You need this software to be able to read this link. Did you install it ?

if yes: create a cookie to not ask next time; return false and the link applies
if false: window.location.href = '/downloadpage/'
10
ответ дан 24 November 2019 в 10:58
поделиться

Я пытаюсь сделать что-то подобное, и я просто обнаружил трюк, который работает с Firefox. Если вы объедините его с трюком для IE, вы можете иметь тот, который работает на обоих основных браузерах (я не уверен, работает ли он в Safari, и я знаю, что это не работает в Chrome)

if (navigator.appName=="Microsoft Internet Explorer" && document.getElementById("testprotocollink").protocolLong=="Unknown Protocol") {
    alert("No handler registered");
} else {
    try {
        window.location = "custom://stuff";
    } catch(err) {
        if (err.toString().search("NS_ERROR_UNKNOWN_PROTOCOL") != -1) {
            alert("No handler registered");
        }
    }
}

, чтобы это работало Вам также нужно скрыть ссылку где-то на странице, как это:

<a id="testprotocollink" href="custom://testprotocol" style="display: none;">testprotocollink</a>

Это немного хакей, но это работает. Версия Firefox, к сожалению, по-прежнему всплывает оповещение по умолчанию, который приходит в поле зрения, когда вы пытаетесь посетить ссылку с неизвестным протоколом, но он будет запущен ваш код после того, как предупреждение уволен.

1
ответ дан 24 November 2019 в 10:58
поделиться

Вы можете попробовать что-то вроде этого:

function OpenCustomLink(link) {

    var w = window.open(link, 'xyz', 'status=0,toolbar=0,menubar=0,height=0,width=0,top=-10,left=-10');
    if(w == null) {            
        //Work Fine
    }
    else {
        w.close();
        if (confirm('You Need a Custom Program. Do you want to install?')) {
            window.location = 'SetupCustomProtocol.exe'; //URL for installer
        }
    }
}
3
ответ дан 24 November 2019 в 10:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: