【问题标题】:Workaround for href="file://///..." in FirefoxFirefox 中 href="file://///..." 的解决方法
【发布时间】: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 会向您发送一个网页,其中包含例如 &lt;iframe src="file:///etc/passwd"&gt;&lt;/iframe&gt; 并且在同一页面上将是 JavaScript,它读取所述 iframe 的内容并将其发送回服务器 X,例如通过WebSockets。

标签: html firefox unc


【解决方案1】:

当父 HTML 页面本身使用不同的协议(如 http://)提供服务时,Firefox 等浏览器拒绝打开 file:// 链接。

最好的办法是配置您的网络服务器,以将网络映射文件作为网络资源提供,以便可以从同一服务器通过 http:// 而不是通过 file:// 访问它。

由于不清楚您使用的是哪个网络服务器,我无法详细说明如何实现这一点。

【讨论】:

  • 我同意。毕竟这就是网络服务器的用途。
  • 使用 http:// 提供文档的副本,因此用户不会打开实际文件。因此,如果您要链接到您希望用户能够编辑的文档,您应该使用 file://。
  • 如果这是唯一的目的,我建议您看看 Google Documents 之类的东西。
  • 感谢您的建议,很遗憾,我无法使用 Google 文档有几个原因。
【解决方案2】:

我不知道这是否可行,但试一试!旧文章,但可能仍然有用。

http://www.techlifeweb.com/firefox/2006/07/how-to-open-file-links-in-firefox-15.html

【讨论】:

  • 这需要更改所有网站访问者的浏览器设置。不确定这是否是 OP 的想法。
  • 这时你告诉你的 IT 管理员在他的下一个镜像构建中将它烘焙到 Firefox 中:P
  • 我对此进行了测试,并且能够让它在 Firefox 3.6 和 Windows Vista 中运行。不幸的是,我没有办法像这样更新用户的机器。
【解决方案3】:

事实证明,我不知道 Firefox 有这个限制/功能。我可以同情该功能,因为它可以防止用户无意中访问本地文件系统。幸运的是,有一些有用的替代方案可以在坚持 HTTP 协议的同时提供类似的用户体验。

通过 UNC 路径访问内容的另一种方法是使用 WebDAV 协议发布您的内容。一些内容管理系统,例如 MS SharePoint,使用 WebDAV 来提供对文档和页面的访问。就最终用户体验而言,它的外观和感觉就像使用 UNC 路径访问网络文件一样;但是,所有文件交互都是通过 HTTP 执行的。

这可能需要对您的文件访问理念进行适度更改,因此我建议您阅读与您的特定服务器技术相关的 WebDAV 协议、配置和权限管理。

如果您有兴趣了解有关在一些领先的 ​​HTTP 服务器上配置和使用 WebDAV 的更多信息,以下几个链接可能会有所帮助:

【讨论】:

    【解决方案4】:

    这个问题之前至少被问过两次,但在发布我自己的帖子之前我无法找到这些帖子(抱歉):

    Open a direct file on the hard drive from firefox (file:///)

    Firefox Links to local or network pages do not work

    以下是所有三个帖子的答案摘要:

    • 使用 WebDAV - 这对我来说是最好的解决方案,尽管比我预期的要复杂得多。
    • 使用 http:// 而不是 file:///// - 这将提供用户无法编辑和保存的文档副本。
    • 按照here 的描述在客户端编辑 user.js — 这在 Firefox 3.6.15 中对我有用,但无法访问客户端计算机,这不是解决方案。
    • 在 Firefox 中,使用 about:config,将 Security.fileuri.strict_origin_policy 设置更改为 false - 这在 3.6.15 中对我不起作用。 [SO] 上的其他用户也报告说它不起作用。
    • 使用 locallinks Firefox 扩展 - 这会将 Security.fileuri.strict_origin_policy 设置为 true,并且似乎没有其他效果。
    • 在服务器端读取文件并将其作为响应发送 - 这与简单地将 Web 服务器配置为使用 http:// 存在相同的问题。

    【讨论】:

    • security.fileuri.strict_origin_policy = falseuser.js/prefs.js 更新都适用于 FF 26(如果用于本地 CSS 参考)
    • @AndreasDietrich prefs.js 解决方案works again
    • @ederag thx - 这个反馈通常很有价值 - 我正在使用本地运行的 HTTP 服务器来提供文件,不幸的是我绑定到 FF 26 来测试/开发 GWT 应用程序(开发模式兼容性/支持原因)
    【解决方案5】:

    在 Firefox 中打开 File:\\\\\yourFileServer\docs\doc.txt 例如你需要在 Firefox 配置中打开一些选项:

    user_pref("capability.policy.policynames", "localfilelinks");
    user_pref("capability.policy.localfilelinks.sites", "http://yourServer1.companyname.com http://yourServer2.companyname.com");
    user_pref("capability.policy.localfilelinks.checkloaduri.enabled", "allAccess");
    

    【讨论】:

    • 不适用于 FF 26(如果用于本地 CSS 参考)
    • 此功能已被restored。 (在 Firefox 45 上检查)
    【解决方案6】:

    添加您自己的策略,在地址栏中打开配置“about:config”并添加三个新条目:

    • capability.policy.policynames MyPolicy
    • capability.policy.MyPolicy.sites http://localhost
    • capability.policy.MyPolicy.checkloaduri.enabled allAccess

    http://localhost 替换为您的网站。
    适用于 Firefox 70.0。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多