Я создаю сайт в HTML. Есть ли способ обнаружить программное обеспечение, установленное на ПК, с которого осуществляется доступ к веб-сайту. Я уверен, что это делается с помощью JavaScript, но я не нашел бы для этого руководства. Также я поигрался с некоторыми jquery, и это не сработало. Спасибо
Какой точно вы пытаетесь обнаружить. Не будь широким. Вы упомянули в комментарии, как Java может обнаруживать геймпады. У JavaScript тоже есть такая возможность, но браузер (к счастью) разборчив в этом, будет и не будет раскрывать. Что вы на самом деле пытаетесь сделать?
@ zero298 Ничего особенного. Я просто играл с JavaScript и HTML. Не могли бы вы уточнить, как JavaScript может обнаруживать геймпады. Я долго искал. Или, может быть, он может определять драйверы, а не программное обеспечение? Есть предположения.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Нет.
JavaScript в браузерах имеет высокий в песочнице в целях безопасности. Нет никакого способа узнать что-либо о компьютере, на котором работает веб-сайт, кроме очень ограниченного набора информации, доступной браузером.
Установленное программное обеспечение не входит в эту информацию, равно как и файлы на компьютере.
Спасибо за ответ. Но я правильно помню, как некоторое время назад я играл в онлайн-флеш-игру, где она использовалась для обнаружения моего программного обеспечения виртуального контроллера. Так было ли это сделано с помощью flash или JavaScript?
Flash способен на большее. Flash - это не JavaScript. Он запускается через плагин, установленный в браузере, который может обходить песочницу. Flash в значительной степени исчез в браузерах, хотя именно потому, что он постоянно создавал довольно серьезные проблемы с безопасностью.
В случае с JavaScript это то же самое для программного обеспечения и драйверов (я имел в виду, они оба скрыты от JavaScript или только список программного обеспечения ограничен, а драйверы доступны для доступа).
Все драйверы, файловая система, программное обеспечение и т. д. Ограничены. Почти все в компьютере, за исключением нескольких очень простых вещей (ОС, пользовательский агент браузера), скрыто. Есть некоторые вещи, для которых доступны API-интерфейсы, которые браузер сделает доступными контролируемым образом после получения явного разрешения от пользователя (камера, данные о местоположении, микрофоны и т. д.), Но это очень конкретный список. Если есть что-то конкретное, что вас волнует, я могу указать вам правильное направление.
Вы можете использовать Электрон, и это позволит вам взаимодействовать с пользователем через JavaScript (используя Node JS).
Однако он требует, чтобы пользователь установил ваш код как приложение. Так что это больше не будет «веб-сайтом».
Если они хотят написать приложение с использованием стека веб-технологий, это будет хорошим решением. Я сделал то же самое с помощью Chromium. Хотя, как вы сказали, это определенно больше не будет считаться веб-сайтом.
Короткий ответ: НЕТ. Однако я хочу ответить на этот вопрос внимательно и конкретно, потому что я думаю, что вы, возможно, неправильно понимаете цель и возможности браузера. Некоторые аспекты вашей машины доступны вашему браузеру. Однако некоторые вещи намеренно замаскированы для защиты конечных пользователей.
Когда вы создаете веб-приложение, вы не должны думать: «Что установил пользователь, что я могу использовать». Вместо этого вы должны попытаться предоставить набор функций, а затем постепенно увеличивать пользовательского опыта в зависимости от того, что пользователь может и позволяет вам использовать.
Вы прокомментировали, как Flash смог обнаружить геймпады,
I remember correctly a while ago I used to play an online flash game where it used to detect my virtual controller software. So was it done by flash or JavaScript?
JavaScript действительно может сделать это с помощью API геймпада. См. Примеры в Использование Gamepad API.
Следует отметить, что браузер является привратником этой информации и пытается максимально ограничить (или должен) то, что раскрывается. Например, другой способ, которым браузер может выдать информацию, - это строка пользовательский агент, которая отправляется с каждым запросом, который делает ваш браузер. Он может определить, какой браузер вы используете, а также какую операционную систему вы используете. Конечно, его также можно было опустить или просто лежать.
Еще одна вещь, которую можно предать, - это разрешение экрана. Поскольку, я бы сказал, пользователи обычно запускают браузеры с максимальным разрешением, вы можете определить размеры монитора пользователей.
Вы также можете получить информацию о том, есть ли у пользователя микрофон или камера с помощью MediaDevices.getUserMedia ().
Вы даже можете попытаться выяснить, какими возможностями обладает графический процессор пользователя с контекстом WebGL и запросить параметры отладки:
function printContextInfo(gl) {
console.groupCollapsed("WebGL Information");
console.groupCollapsed("Version Information");
console.info(`Version: ${gl.getParameter(gl.VERSION)}`);
console.info(`Shading Language Version: ${gl.getParameter(gl.SHADING_LANGUAGE_VERSION)}`);
console.info(`Renderer: ${gl.getParameter(gl.RENDERER)}`);
console.groupEnd();
console.groupCollapsed("Parameter Limits");
console.info(`Max Texture Size: ${gl.getParameter(gl.MAX_TEXTURE_SIZE)}`);
console.info(`Max Viewport Dims: ${gl.getParameter(gl.MAX_VIEWPORT_DIMS)}`);
console.info(`Max Vertex Attribs: ${gl.getParameter(gl.MAX_VERTEX_ATTRIBS)}`);
console.info(`Max Vertex Uniform Vectors: ${gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS)}`);
console.info(`Max Varying Vectors: ${gl.getParameter(gl.MAX_VARYING_VECTORS)}`);
console.info(`Max Combined Texture Image Units: ${gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)}`);
console.info(`Max Vertex Texture Image Units: ${gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)}`);
console.info(`Max Texture Image Units: ${gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)}`);
console.info(`Max Fragment Uniform Vetors: ${gl.getParameter(gl.MAX_FRAGMENT_UNIFORM_VECTORS)}`);
console.groupEnd();
console.groupCollapsed("Supported Extensions");
gl.getSupportedExtensions().forEach(extension => console.info(extension));
console.groupEnd();
let debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
if (debugInfo) {
console.groupCollapsed("Debug Info");
console.info(`Unmasked Vendor: ${gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL)}`);
console.info(`Unmasked Renderer: ${gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL)}`);
console.groupEnd();
}
console.groupEnd();
}
const canvas = document.getElementsByTagName("canvas")[0],
ctx = canvas.getContext("webgl");
printContextInfo(ctx);<canvas width = "100" height = "100"></canvas>Спасибо за ответ. Причина, по которой я хотел это сделать, заключалась в том, чтобы предложить пользователю похожие вещи, которые ему могут понравиться, например, если у него установлена какая-то игра (скажем, Skyrim), веб-сайт предложит похожие игры (ведьмак 3).
Is there anyway to detect the software installed on PCНет, лучшее, что вы можете сделать, это взять строкуuser-agent, но ее можно подделать.