从Web浏览器打开文件系统文件夹/目录

时间:2010-11-18 18:04:29

标签: javascript linux macos cross-browser windows-explorer

我将桌面应用程序在闪存驱动器上分发给Windows,Mac和Linux上的数千名用户。我有一个HTML启动页面,其中包含指向闪存驱动器上的文档,安装指南,发行说明等的链接。我希望用户只需直接从浏览器安装,但这正是防病毒程序试图阻止的(这是正确的)。它不是试图启动安装程序,而是找到安装程序并让用户自己完成最后一步。

是否可以使主机上的文件系统管理器(Explorer,Finder等)打开包含该文件的文件夹并突出显示它?我认为这需要JavaScript,它可能必须与Windows,Mac和Linux不同。此外,适用于大多数浏览器(IE,FF,Chrome,Safari,Opera)。

这与解决费马的最后定理有着相似的难度吗?

由于

2 个答案:

答案 0 :(得分:3)

不。浏览器(或大多数*)会阻止这种行为。它们在您的实际文件系统和Web为您提供的内容之间有一道隔离墙。只有HTML输入控件才会破坏它,并且它们也有相当多的保护。

* - 您可以使用IE ActiveX控件,但这只是IE浏览器。

答案 1 :(得分:2)

只要从本地文件系统加载页面,此JS代码就适用于Windows上的IE和Firefox。您需要在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