Я немного разочарован отсутствием попыток хотя бы дать мне частичное решение.
Хотя я не смог найти независимое от браузера решение, я предложил одно для IE в Windows с использованием WMI, точнее, WbemScripting.SWbemLocator
ActiveX Object. Это лучше, чем ничего, лучше, чем «ты не можешь этого сделать».
Итак, для всех, кто заинтересован, вот оно:
function pollConnectedDevices()
{
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var conn = locator.ConnectServer(".", "root\\cimv2");
var result = conn.ExecQuery("Select * From Win32_USBHub");
var enumer = new Enumerator(result);
for (;!enumer.atEnd();enumer.moveNext ())
{
var hub = enumer.item ();
alert(hub.Name + " " + hub.DeviceId);
}
setTimeout("pollConnectedDevices()",1000);
}
setTimeout("pollConnectedDevices()",1000);
Да, это только в IE в Windows. Да, для этого нужно разрешение пользователя. Но, ДА, это что-то, возможно, оно делает то, что мне нужно.
Если кто-то еще знает другой путь - и я говорю здесь о коде, а не мнениях, я все еще ищу частичные решения для других браузеров и операционных систем. Запрашивать USB-устройства интересно, и, несмотря на все аргументы, я говорю, что «это программное обеспечение, оно должно что-то делать, а не мешать вам что-то делать».