2013-09-26 39 views
3

我正在研究一个Web应用程序,它需要有一个链接从文件服务器打开文档文件夹。该文件夹可以在新的浏览器选项卡或新窗口中打开,也可以使用计算机的默认文件浏览器程序(即Windows资源管理器)打开。这个JavaScript应该做的伎俩:如何通过Firefox和Chrome网站上的链接打开文件夹?

window.open('file://///fileserver.companyname/public/Documents/','_blank);

和这个网站也应该工作:

<a href="file://///fileserver.companyname/public/Documents/">Open Documents</a>

但这些都只能工作在Internet Explorer中,和我们的用户经常使用Firefox和Chrome。显然Firefox和Chrome的默认安全设置不允许您在从“http://”网站调用请求时打开“file://”。

我已经看到这个页面的几个引用:Links to local pages do not work它描述了为什么你不能使用Firefox从网页打开文件,并提供了一些解决方法。不幸的是,它只提供两种选择:在每个浏览器实例上安装一个插件,或为每个浏览器实例创建一个用户首选项文件。这些选项都不可接受,因为我们有太多的用户。我工作的公司不愿意将任何东西应用于需要访问此链接的每台机器。除此之外,无论如何,我都尝试过插件和首选项文件,唯一能为我工作的是IE Tab插件。我认为LocalLinks不起作用的原因是因为我试图打开一个文件夹,而不是一个文件。

这个stackoverflow问题描述了Chrome的类似选项:Can Google Chrome open local links?但是,LocalLinks插件不适用于我,无论如何也不接受插件。

我还发现了一个网站,建议使用命令行参数顶部打开的文件在Chrome(http://www.askyb.com/chrome/open-local-file-in-google-chrome/)和一个展示了如何运用自动参数(https://askubuntu.com/questions/160245/making-google-chrome-option-allow-file-access-from-files-permanent),但如果我正确地读它,它仍然涉及应用更改到每台访问我们网站的电脑。

任何方式两个Firefox和Chrome打开一个文件夹完全编程即我的web应用程序C#或Javascript代码中没有插件安装或添加的参数文件到个人电脑?我无法改变这些业务需求。我希望在C#中使用控制器动作打开文件夹(因为我想在打开文件夹之前创建文件夹,如果它尚不存在的话)。我希望在C#中使用控制器动作打开文件夹(因为如果它尚不存在, ,但客户端的javascript或html是可以接受的。对于Internet Explorer,我可以在C#代码中创建该JavaScript,方法是将其封装在MVC C#控制器中内置的JavaScript(...)函数中。在Firefox和Chrome中测试IE Tabs时,我必须将其定义为href链接,而不是打开窗口的函数,否则IE Tabs将无法将其识别为链接。但这些都不是我们业务需求的可接受解决方案。

+0

我怀疑,如果你所描述的是可能的话,那将代表一个安全漏洞。 –

回答

0

这里是简单的html代码:

<input type="file" webkitdirectory>

但这段代码的问题是,它仅适用于谷歌!

2

在我想出一个可行的解决方案之前,请求已被删除,但如果其他人仍然在解决这个问题,我将描述不需要任何工作站定制的解决方法。

他们在技术上不需要使用内置文件资源管理器来打开文件夹。相反,在不中断任何浏览器安全规则的情况下显示业务所需信息的创造性方法是在不打开文件资源管理器的情况下迭代文件,然后在浏览器窗口中显示文件夹/文件列表。

使用Directory.EnumerateDirectories(filepath)Directory.EnumerateFiles(filepath)您可以获取要显示的文件夹和文件的列表。当用户点击其中一个文件夹时,再次调用这些方法来获取下一级的文件夹和文件名。当用户点击一个文件时,下载/打开它。这些方法将文件夹和文件名称作为字符串列表返回,因此您只需在浏览器中使用自定义图标来呈现列表。 (这些方法来自C#的System.IO库。)