繁体   English   中英

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

[英]Opening a file system folder/directory from web browser

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

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

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

谢谢

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM