【问题标题】:Opening a file system folder/directory from web browser从 Web 浏览器打开文件系统文件夹/目录
【发布时间】:2010-11-18 18:04:28
【问题描述】:
我将我的桌面应用程序通过闪存驱动器分发给 Windows、Mac 和 Linux 上的数千名用户。我有一个 HTML 起始页,其中包含指向闪存驱动器上的文档、安装指南、发行说明等的链接。我希望用户直接从浏览器安装,但这正是防病毒程序试图阻止的(而且是正确的)。无需尝试启动安装程序,只需找到安装程序并让用户自己完成最后一步即可。
是否可以使主机上的文件系统管理器(Explorer、Finder 等)打开包含该文件的文件夹并突出显示它?我认为这将需要 JavaScript,并且对于 Windows、Mac 和 Linux 可能必须有所不同。此外,可在大多数浏览器(IE、FF、Chrome、Safari、Opera)中使用。
这是否与解决费马大定理的难度相似?
谢谢
【问题讨论】:
标签:
javascript
linux
macos
cross-browser
windows-explorer
【解决方案1】:
不。浏览器(或大多数浏览器*)会阻止这种行为。它们在您的实际文件系统和 Web 为您提供的内容之间有一堵墙。只有 HTML 输入控件打破了这一点,而且他们也有相当多的保护。
*- 您可以使用 IE ActiveX 控件,但仅限 IE。
【解决方案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