【发布时间】:2011-07-16 03:02:41
【问题描述】:
在 Intranet 站点上,假设我想使用 UNC 链接到共享上的文件,位于:
\\servername\foldername\filename.rtf
似乎正确的方法是使用这样的标记:
<a href="file://///servername/foldername/filename.rtf">filename.rtf</a>
这是五个斜杠 - 两个用于协议,一个表示文件系统的根目录,另外两个表示服务器名称的开头。
这在 IE7 中可以正常工作,但在 Firefox 3.6 中,只有当 html 来自本地文件时才能正常工作。当文件来自网络服务器时,我无法让它工作。该链接已“失效” - 单击它什么也不会发生。
在 Firefox 中有解决方法吗?这两个浏览器应该是我现在需要担心的全部了。
由于这显然是 Firefox 的一个功能,而不是一个错误,有人可以解释一下阻止这种类型的链接有什么好处吗?
【问题讨论】:
-
这是一种浏览器安全措施。您是否希望其他人的网页在幕后从您的计算机加载文件?
-
@Brian - 不,
href="//..."在 Firefox 中也不起作用,尽管它在 IE 中起作用。几乎任何东西都可以在 IE 中使用。 (file://工作,file:///工作,file://\\工作,//工作,\\工作等)。 -
@pstanton:为什么不希望网页从硬盘加载文件?服务器不会从您那里下载它们,您的计算机只是显示存储在您计算机上的文件。 (顺便说一句,我记得有人链接到 Myspace 上的本地图像文件,却没有意识到它只能在他们自己的计算机上运行。)
-
@endolith 当你通过
file://加载本地HTML页面时,它实际上可以通过file://访问其他文件。当您通过http://加载页面时,它不允许您通过file://访问文件。想象一下这种情况 - 您可以创建 Web 应用程序,通过file://在您的系统上加载文本文件,然后使用 JavaScript 将其内容发送回服务器。每个人都可以创建可以读取所有文件并将它们发送回服务器的 Web 应用程序。 -
@endolith /would/ 如果
file://可以在通过http://发送的页面上工作。您将从服务器 X 请求一些页面。服务器 X 会向您发送一个网页,其中包含例如<iframe src="file:///etc/passwd"></iframe>并且在同一页面上将是 JavaScript,它读取所述 iframe 的内容并将其发送回服务器 X,例如通过WebSockets。