Определить из браузера, если установлено конкретное приложение - PullRequest
9 голосов
/ 15 ноября 2008

У нас есть расширенная веб-страница (ASP.NET, C #) и приложение, которое необходимо установить на клиентском компьютере, чтобы использовать веб-страницу в полной мере. Приложение представляет собой приложение в трее и имеет в основном две задачи. Определить, когда на веб-сервере происходят определенные события (например, пригласить на собрание, или уведомить о предстоящей встрече). Другая задача, которую выполняет trayapp, заключается в использовании собственного протокола (trayapp: //) для выполнения некоторых ajax-вызовов обратно на сервер.

Одна из проблем, с которой мы столкнулись, заключается в том, как определить, установлено ли приложение на локальном компьютере или нет. Теперь пользователь должен поставить галочку, чтобы сообщить веб-сайту, что приложение установлено, и что безопасно вызывать вызовы trayapp: // url.

Есть ли какой-нибудь способ, например, с помощью JavaScript или аналогичного способа определить, установлено ли наше приложение на локальном компьютере?

Проверка должна работать для браузеров IE, FF и Opera.

Ответы [ 5 ]

6 голосов
/ 15 ноября 2008

При установке клиентского приложения вы можете изменить конфигурацию браузера, включив в заголовки HTTP еще один заголовок запроса, а затем заставить код сервера искать этот заголовок, например, как поддерживаемый тип MIME, используя следующий ключ реестра (для Интернета. проводник)

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
                                                      Internet Settings\Accepted Documents

Я не уверен, что Opera и FF используют один и тот же ключ, но они, вероятно, имеют схожие параметры конфигурации, но это должно, по крайней мере, привести вас на правильный путь.

5 голосов
/ 15 ноября 2008

Если вы хотите обнаружить с помощью javascript внутри браузера, вы можете использовать коллекцию "navigator.plugins". Он работает с Firefox, Opera и Chrome, но, к сожалению, не с IE.

Обновление: В FF, Opera и Chrome вы можете легко проверить это так:

if (navigator.plugins["Adobe Acrobat"]) {
// do some stuff if it is installed
} else {
// do some other stuff if its not installed
}

Обновление № 2: Если это объект ActiveX в IE, вы можете проверить, существует ли он, используя что-то вроде этого:

function getActiveXObject(name){
        try{
            return new ActiveXObject(name);
        }
        catch(err){
            return undefined;
        }
};

Другой подход для IE - это нечто похожее на то, что предложил JohnFx (я нашел его здесь и не проверял его):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Internet
Settings\User Agent\Post Platform
2 голосов
/ 06 июля 2014

Хорошо, метод, который был упомянут «некоторыми», очень распространен, но есть и другие методы, например, если приложение прослушивает локально через порт, оно может быть обнаружено из браузера, что очень часто встречается в решениях безопасности, потому что имеет какой-то вид локального прокси для фильтрации трафика. Я недавно снял видео об использовании этого метода для обнаружения антивируса avast, вы можете посмотреть его здесь:

https://www.youtube.com/watch?v=39_Nd8oiEAk

1 голос
/ 15 ноября 2008

Хорошая идея от @ JohnFx.

Другим способом решения этой проблемы может быть установка элемента управления ActiveX или плагина Browser с установкой trayapp. Затем вы можете получить к нему доступ аналогично тому, как это делается при проверке доступной версии Flash.

0 голосов
/ 15 ноября 2008

Представьте trayapp (предполагается, что это как управляемое приложение) как COM-объект. Затем вы можете использовать тег с GUID и перехватывать ошибки, когда они не найдены, или использовать ActiveXobject с progid, чтобы определить, установлен ли он.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...