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发布写文件的脚本。

时间: 2024-08-02 09:40:10

JavaScript FAQ (十九)——文件访问的相关文章

JavaScript FAQ(九)——Ajax

 七.Ajax问题   1. Ajax:异步JavaScript和XML(Ajax: Asynchronous JavaScript and XML) Q:Ajax这个流行词到底是什么意思呀? A:Ajax这个短语最初有Jesse James Garrett提出,他是Adaptive Path的共同创始人.缩略语Ajax(通常只有第一个字母A大写)代表异步JavaScript和XML(Asynchronous JavaScript and XML):从本质上说,它是一个营销短语,意思是可以开发一

JavaScript FAQ(二十五 完)—— 错误处理

二十二.错误处理   1.禁止JS错误(Suppress JS Errors) Q:我是否可以禁止JavaScript错误信息? A:可以.要禁止页面上所有的JavaScript错误信息,你要把下面一段代码放在页面的HEAD部分: <SCRIPT language="JavaScript"> <!-- function silentErrorHandler() {return true;} window.onerror=silentErrorHandler; //--

JavaScript FAQ(二十二)——客户端信息

十九.客户端信息   1.浏览器名称(Browser Name) Q:我如何检测浏览器名称? A:要获取用户浏览器的实际名称,你可以用navigator.appName和navigator.userAgent属性.userAgent属性比appName更可靠些,例如,Firefox(和其他一些浏览器)由于兼容Netscape Navigator,因此对navigator.appName可能返回"Netscape". 下面的代码实例使用navigator.userAgent实现浏览器检测

JAVA之旅(二十九)——文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习

JAVA之旅(二十九)--文件递归,File结束练习,Properties,Properties存取配置文件,load,Properties的小练习 我们继续学习File 一.文件递归 我们可以来实现一个文件管理器,简单的,但是在此之前,我们先来做点小案例 package com.lgl.hellojava; import java.io.File; public class HelloJJAVA { public static void main(String[] args) { File d

DockOne微信分享(六十九):微服务选型之Modern Node.js

本文讲的是DockOne微信分享(六十九):微服务选型之Modern Node.js[编者的话]目前Node.js的发展非常快,大家可能还停留在:Node.js性能很好,Node.js里都是回调,写起来很恶心,Node.js只能做前端工具,Node.js是单线程部署会有问题,以及这样的八卦<uber用go替代Node.js重写了地理位置服务>... 可是真相呢? 在微服务盛行的今天,为什么我们要选用Node.js去构建微服务呢?本次分享将试图从以下2个方面给出答案: 被误解的Node.js:除

DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践

本文讲的是DockOne微信分享(七十九):基于容器技术构建企业级PaaS云平台实践[编者的话]企业级容器化PaaS平台旨在为企业应用提供底层支撑能力,覆盖应用开发.应用交付.上线运维等环节,包括代码的管理.持续集成.自动化测试.交付物管理.应用托管.中间件服务.自动化运维.监控报警.日志处理等,本次分享主要介绍基于容器技术构建PaaS平台所采用的相关技术.涉及的核心功能模块以及相关方案. 为满足以上需求,MoPaaS企业版基于Cloud Foundry及Kubernetes等开源技术框架和智能

云计算设计模式(十九)——运行重构模式

云计算设计模式(十九)--运行重构模式 设计应用程序,使得它可以在不需要重新部署或者重新启动应用程序重新配置.这有助于保持可用性并减少停机时间. 背景和问题 一个主要目的为重要的应用,如商业和企业网站是尽量减少停机时间以及由此引发的中断给客户和用户.但是,有时有必要重新配置应用程序改变特定行为或设置,而在部署和使用.因此,它是用于该应用程序被设计成这样一种方式,以允许在运行时要应用这些配置的变化,并为应用程序,以检测所述变化并且尽快地应用它们的部件的优点. 该种要应用可能被调整记录,以协助与应用

二十九、教你备份与恢复Windows 2000注册表_注册表

二十九.教你备份与恢复Windows 2000注册表         Windows 2000将它的配置信息存储在注册表的数据库中,其中包含了每个计算机用户的配置文件,以及有关系统硬件.已安装的程序和属性设置等信息,Windows 2000在运行过程中要一直引用这些信息.注册表是以二进制形式存储在硬盘上,错误地编辑注册表可能会严重损坏系统.所以,在更改注册表之前,强烈建议备份注册表信息.为了防止在修改注册表的时候发生致命错误,有必要了解一下注册表文件的备份和恢复方法.除此之外,为了研究注册表的结

JavaScript FAQ(一)—— 常见问题(一)

        今天在网上看到了一份很不错的JavaScript FAQ,由于担心自己并不能一直把它读完,所以就尝试翻译一些内容,和朋友们一起分享.        FAQ原地址:http://www.javascripter.net/faq/index.htm        一.常见问题        1.关于这个FAQ(About this FAQ)        Q:为什么要使用这个FAQ?        A:这个FAQ的目的是帮助你开发强壮的客户端脚本,它不但可以运行在Netscape N