Открытие папки / каталога файловой системы из веб-браузера - PullRequest
4 голосов
/ 18 ноября 2010

Я распространяю свое настольное приложение на флеш-накопителях среди тысяч пользователей в Windows, Mac и Linux.У меня есть стартовая страница HTML, на которой есть ссылки на документацию, руководство по установке, заметки о выпуске и т. Д., Которые находятся на флэш-накопителе.Я бы хотел, чтобы пользователь просто устанавливал его прямо из браузера, но это именно то, что антивирусные программы пытаются предотвратить (и это правильно).Вместо того, чтобы пытаться запустить установщик, достаточно найти установщик и позволить пользователю сделать последний шаг самостоятельно.

Можно ли заставить диспетчер файловой системы (Explorer, Finder и т. Д.) На главном компьютере открыть папку, содержащую файл, и выделить его?Я предполагаю, что для этого потребуется JavaScript и, возможно, он будет другим для Windows, Mac и Linux.Кроме того, работа в большинстве браузеров (IE, FF, Chrome, Safari, Opera).

Эта шкала сложности аналогична решению последней теоремы Ферма?

Спасибо

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010

Неа. Браузеры (или большинство из них *) предотвращают подобное поведение. Они имеют стену между вашей действительной файловой системой и контентом, который вам служит. Это нарушает только элемент управления вводом HTML, и они тоже имеют немалую защиту.

* - Вы можете использовать элемент управления IE ActiveX, но только для IE.

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

Этот код JS должен работать для IE и Firefox в Windows, если страница загружена из локальной файловой системы. Вам нужно будет проверить это на Linux / OSX. Я не знаю, как бы вы подошли к Chrome / Safari / Opera.

function execute(command, commandParam)
{

  if (isIE()) {
    try {
      activexShell = new ActiveXObject("Shell.Application");
      activexShell.ShellExecute(command, commandParam, "", "open", "1");
      exit();
    } catch (e) {
      alert("exception " + e.name + ': ' + e.message);
    }
  }
  else {
    try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      var FileFactory = new Components.Constructor("@mozilla.org/file/local;1","nsILocalFile","initWithPath");      
      var program = new FileFactory(command);
      var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces. nsIProcess);          
      process.init(program); 
      process.run(false, commandArray, commandParam.split(" ").length - 1, {});
      exit();
    } catch (e) {
      alert("exception " + e.name + ': ' + e.message);
    }
  }
}

Конечно, вам может понадобиться подписать файл .js, чтобы он заработал. Для получения дополнительной информации см. Здесь: http://www.mozilla.org/projects/security/components/signed-scripts.html

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