Javascript Доступ к локальным исполняемым файлам - PullRequest
0 голосов
/ 05 ноября 2010

На сайте http://combatarms.nexon.net/ справа есть кнопка «Начать игру».Если на вашем компьютере установлена ​​игра и вы зашли на сайт, то при нажатии на кнопку она запустит игру на вашем компьютере.

Как это возможно?Меня всегда убеждали, что Javascript не может получить доступ ни к чему, кроме самого браузера, потому что это будет проблемой безопасности, так как это работает?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

Я думаю, что Амир почти прав, но похоже, что они регистрируют не протокол, а тип MIME, и используют ActiveX (для IE) и подключение браузера для Firefox и других браузеров:

С http://combatarms.nexon.net/JS/NGM.js:

this.strGameAXName = "NXCOM.NxGameControl.US.2"; // ActiveX class
this.strGameFPName = "application/x-npnxgame-us"; // MIME type
this.strNxMInfoAXName = "NXCOM.NxMachineControl.US.1"; // ActiveX class
this.strNxMInfoFPName = "application/x-npnxminfo-us"; // MIME type

В итоге, поскольку вы говорите, что это работает только при установке игры, кажется, что они используют тот же метод, что, например, Adobe Reader или Quicktime: установка подключаемого модуля браузера / activex и регистрация типа MIME, который связан с этим плагином.

Единственное отличие состоит в том, что они используют JavaScript (вы можете использовать любой плагин из JavaScript, например, вы можете управлять плагином Windows Media Player или Flash, используя JS).

1 голос
/ 05 ноября 2010

Это, вероятно, не тот путь, но в старые времена большинство приложений делали регистрацию протокола, который они слушали. Таким образом, цель была цель: // и winamp: //. Затем операционная система обрабатывает эти протоколы и передает их соответствующему приложению. Мне любопытно, если это то же самое здесь.

Хорошо, что бы это ни было, кажется, в этом файле. http://combatarms.nexon.net/JS/NGM.js

Редактировать аааа:)

var NGMModuleInfo = '<?xml version="1.0"?><NGMModule><NGMDll host="ngm.nexon.net/ngm/NGM/Bin/NGMDll.dll" crc="1505415642" /><GameData><combatarms_us gamecode="33563143" crc="0" /></GameData></NGMModule>';

Так что это файл dll, который используется. Так что скорее всего ActiveX или что-то подобное. Вероятно, не работает на Mac:)

...