【问题标题】:In Firefox, Write to a File using Javascript?在 Firefox 中,使用 Javascript 写入文件?
【发布时间】:2010-11-26 09:53:39
【问题描述】:

情况:- 我创建了一个安装设置(本地),它返回一个 URL,例如:-ved.test.com,它映射到一个 IP 11.22.33.44。 因此,为了使 Web 应用程序在安装后可以访问,用户必须明确地在“C:\WINNT\system32\drivers\etc”目录下的 hosts 文件中创建一个条目。

方法:- 安装应用程序完成后,应用程序使用 Javascript 写入文件。

问题:- IE 支持使用 Javascript 编写文件。我需要 Firefox 的解决方案。 使用的代码:-

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Write To A File</title>
<script language="javascript">
    function WriteToFile()
    {
    /* The below statement is supported in IE only */
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile("C:\\Test.txt", true);
    s.WriteLine('IE Supports Me!');
    s.Close();
    }
</script>
</head>
    <body onLoad="WriteToFile()">
</body>
</html>

还参考了 SO 中的链接:- How to read and write into file using JavaScript

请提供支持使用在 Firefox 浏览器中运行的 Javascript 编写文件的解决方案。

提前致谢。

【问题讨论】:

  • 您的 SO-link 回答了这个问题。这在浏览器中是不可能的。
  • 你刚刚覆盖了我的 C:\Test.txt!说真的,不允许任何网页写入用户的文件系统。而搞乱“%SystemRoot%\system32\drivers\etc\hosts”显然是恶意行为。
  • @user205376 - 是的,我知道主机文件操作,正在帮助我的应用程序用户获得更好的体验。于是就遇到了这种情况。

标签: javascript firefox file-io


【解决方案1】:

出于明显的安全原因,您不能这样做。 JavaScript 无法访问文件系统...在 IE 中它不是 JavaScript,但 ActiveX 这样做...它只是暴露了一个 JavaScript API。

问题不在于 Firefox 不这样做……而是 IE 曾经允许它:)

【讨论】:

  • 我很惊讶我竟然能more讨厌 IE。
  • IE比较好,因为统计数据说mozilla.com的用户最多使用IE...
  • @Nick 感谢您的回复。如果在 FF 中不可行,请建议我采用不同的方法。
  • @khachik:为什么这是 IE 更好的原因?他们用IE访问mozilla.com下载Firefox。
  • @UIDreamer - 我不确定这里有一个“可行的”解决方案,你说的是每个浏览器的扩展/代码库......那时你为什么使用浏览器?真的,你只是想使用浏览器做一些它不打算做的事情,我会看看另一种解决方案。例如:Flash、Silverlight、AIR 等
【解决方案2】:

您需要create your own Firefox extension,因为读取/写入本地文件被视为特权操作。

使用 XPCOM 读/写文件:https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O。这不适用于您的网页,而只能用于扩展等特权代码。

【讨论】:

  • 感谢您的回复。所以要运行扩展,用户还需要安装这些扩展吗?
  • @UIDreamer:是的。用户必须单击窗口顶部的黄色栏,单击警告对话框上的安装按钮,然后重新启动 Firefox。
【解决方案3】:

虽然 Firefox 不会让您硬编码到特定路径,但您可以让它向可以手动将其保存到路径的用户显示一个对话框,尽管他们还需要更改文件类型(所以我知道这不是很实用):https://stackoverflow.com/a/13696029/271577。同一篇文章还展示了如何在新选项卡中打开文件内容,用户可以使用浏览器的保存功能手动保存文件(这种方法的好处是文件扩展名默认可以是 .txt(而且它在某些情况下可能会很好,因为它可以让用户预览内容))。

顺便说一句,虽然 Firefox 过去使用本机方式允许 HTML 获得用户权限,但 enablePrivilege 现在是 out the door,我正在开发一个名为 AsYouWish 的附加组件,它允许特权访问(例如桌面文件写入)在每个站点上向用户请求,虽然我希望它最终可以进入 Firefox(需要白名单),但它目前确实需要安装附加组件(并且它仍处于 alpha /beta,有许多事情要完成或解决,最重要的是强制要求使用 https 来避免中间人攻击)。它目前使用一个我认为将来可能与其他浏览器一起使用的 API,它会告知用户正在请求哪些权限,并且它不需要开发人员每次想要拥有自己的插件时都编写新的插件。站点向用户请求特权访问。

【讨论】:

    【解决方案4】:

    有关在 Firefox 中执行此操作的信息,请参阅 https://developer.mozilla.org/en-US/docs/Code_snippets/File_I_O

    看起来像这样:

    var file = Components.classes["@mozilla.org/file/local;1"].
           createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath("/home");
    

    【讨论】:

      猜你喜欢
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 1970-01-01
      相关资源
      最近更新 更多