代码之家  ›  专栏  ›  技术社区  ›  Eric Cloninger

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

  •  4
  • Eric Cloninger  · 技术社区  · 15 年前

    我将我的桌面应用程序在闪存驱动器上分发给Windows、Mac和Linux上的数千个用户。我有一个HTML入门页,其中包含指向文档、安装指南、发行说明等的链接,这些都在闪存驱动器上。我希望用户可以直接从浏览器安装,但这正是反病毒程序试图阻止的(正确的做法)。与其尝试启动安装程序,还不如找到安装程序,让用户自己完成最后一步。

    是否可以使主机上的文件系统管理器(资源管理器、查找器等)打开包含该文件的文件夹并将其突出显示?我认为这需要JavaScript,而且对于Windows、Mac和Linux,它可能会有所不同。此外,在大多数浏览器(即,FF,Chrome,Safari,Opera)中都可以使用。

    这和解费马最后一个定理有相似的难度吗?

    谢谢

    2 回复  |  直到 13 年前
        1
  •  2
  •   Jeff Knecht    15 年前

    只要页面是从本地文件系统加载的,这个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

        2
  •  3
  •   palswim    15 年前

    不。浏览器(或大多数浏览器*)会阻止这种行为。它们在您的实际文件系统和Web为您服务的内容之间有一道墙。只有HTML输入控件打破了这一点,而且它们在这方面也有相当多的保护。

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