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

简介: 十六、文件访问(File Access) 1、读取文件(Reading a File)Q:如何将文件读取到JavaScript变量中?A:根据脚本运行的环境和文件的位置,你可以有以下选项:XMLHttpRequest 对象(通过URL读取网站上可用的文件)FileSystemObject(如果你在一个被信任的环境下使用Windows Scripting Hosting或者IE)一个读取文件或者URL的“助手”Java applet 关于前两个选项的讨论,请点击上面的超链接。

十六、文件访问(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发布写文件的脚本。

目录
相关文章
|
3天前
|
JavaScript
浏览器插件crx文件--JS混淆与解密
浏览器插件crx文件--JS混淆与解密
9 0
|
16天前
|
JavaScript 前端开发 容器
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
AJAX载入外部JS文件到页面并让其执行的方法(附源码)
17 0
|
1月前
|
JavaScript
uni-app中关于格式化时间的js文件
uni-app中关于格式化时间的js文件
32 0
|
2月前
|
JavaScript 前端开发 内存技术
js文件的入口代码及需要入口代码的原因
js文件的入口代码及需要入口代码的原因
|
3月前
|
XML JSON JavaScript
|
3月前
|
存储 JavaScript 前端开发
只使用简单的 JavaScript 创建文件共享型网站
只使用简单的 JavaScript 创建文件共享型网站
39 0
只使用简单的 JavaScript 创建文件共享型网站
|
3月前
|
JavaScript Android开发
AutoJs4.1.0实战教程---js文件打包发布成APK文件
AutoJs4.1.0实战教程---js文件打包发布成APK文件
102 0
AutoJs4.1.0实战教程---js文件打包发布成APK文件
|
4月前
|
JSON JavaScript 前端开发
前端 ex2json 用于 vue/react/js 将 xls、xlsx、csv 文件转成 json 数组
前端 ex2json 用于 vue/react/js 将 xls、xlsx、csv 文件转成 json 数组
93 0
|
4月前
|
JSON JavaScript 数据格式
NPM 发包 js 文件并支持 ts 使用(包含 gulp 打包压缩)
NPM 发包 js 文件并支持 ts 使用(包含 gulp 打包压缩)
61 0
|
1月前
|
JSON JavaScript 前端开发
vue项目使用Print.js插件实现PDF文件打印
vue项目使用Print.js插件实现PDF文件打印
52 0