JavaScript FAQ (十九)——文件访问

十六、文件访问(File Access)

 

1、读取文件(Reading a File)

Q:如何将文件读取到JavaScript变量中?

A:根据脚本运行的环境和文件的位置,你可以有以下选项:

  • XMLHttpRequest 对象(通过URL读取网站上可用的文件)
  • FileSystemObject(如果你在一个被信任的环境下使用Windows Scripting Hosting或者IE)
  • 一个读取文件或者URL的“助手”Java applet

 关于前两个选项的讨论,请点击上面的超链接。

下面我们会讨论最后的一个——为脚本读取文件的Java applet助手。读取文件机制的一个可能实现如下:

1. 脚本调用applet的一个public方法。

2. 这个public方法在applet的另一个线程中初始化读取过程,然后返回。

3. Applet中另一个线程中的读取过程继续执行。同时,脚本持续问applet是否完成读取。

4. Applet完成读取,把文件内容放在applet的一个public的字符串变量中。

5. 脚本看到applet完成读取。

6. 脚本将文件内容从applet的public变量中复制到JavaScript的变量。

      注意未签名的Java applet代码只能读取那些和代码有同一来源(the same origin)的文件。例如,如果你的未签名代码被发布在一个Web服务器上,那么它只允许通过URL阅读在同一个Web服务器上文件。如果你的代码在本地的磁盘上,那么(最多)它只能阅读在同一个磁盘上的文件。

      如果你想阅读有不同来源的文件,你需要对代码签名。(更多信息,请参考写文件;十分相似的安全机制应用于读取那些和代码没有相同来源的文件。)

      这里有一个实现了上述读取机制的简单的例子。下面的矩形是一个叫做ReadURL.class的Java applet。这个Applet读取选择的文件内容到一个public变量fileContent中。完成时,applet将它的public变量finished设为1。

Applet好像不被支持,请到原文处操作实例--译者注

      示例中的脚本读取选择文件,这个文件包含了一个这个FAQ讨论的一些内容。

Choose a file to readJavaScript FAQ Home (file startpag.htm)Reading a File (file reading2.htm)Writing a File (file writinga.htm)

      启动读取进程的JavaScript代码如下:

var fileContent='';
var theLocation='';

function readFileViaApplet(n) {
 document.f1.t1.value='Reading in progress...';
 document.ReadURL.readFile(theLocation);
 setTimeout("showFileContent()",100);
}

function showFileContent() {
 if (document.ReadURL.finished==0) {
  setTimeout("showFileContent()",100);
  return;
 }
 fileContent=document.ReadURL.fileContent;
 document.form1.textarea1.value=fileContent;
}

 

2. 写文件(Writing a File)

Q:如果通过JavaScript写文件?

A:通过JavaScript写文件和从Java Applet写文件一样简单。脚本本身不能写文件,它需要调用一个Java applet的public方法为它完成所有写文件的工作。

坏消息是:

1. 写文件是一个授权操作,因此你的applet必须已经有数字签名以便写文件。

2. 针对Internet Explorer的Applet签名和针对Netscape Navigator的完全不同。

3. 已签名的applet在Netscape Navigator 3中也可能不正产工作。

4. 最坏的是,把授权操作放在已签名的applet的public方法中是非常不安全。如果你发布了这样一个applet,恶意代码可以很容易的推翻applet的public方法,你(applet发布者/签署者)将会因为任何破坏被起诉。

因此,尽管在主流浏览器的版本4中技术上可行,没有人通过签名的applet发布写文件的脚本。

你可能感兴趣的:(JavaScript FAQ (十九)——文件访问)