JavaScriptFAQ(十九)——檔案訪問
十六、檔案訪問(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釋出寫檔案的指令碼。
相關文章
- scala簡要:檔案訪問
- 訪問ASM中的檔案ASM
- IIS訪問共享檔案詳解
- JavaScriptFAQ(一)——常見問題(一)JavaScript
- 檔案和目錄的訪問控制(2)新增訪問控制
- java RandomAccessFile類(隨機訪問檔案)JavarandomMac隨機
- 檔案作為塊裝置訪問
- EJB 訪問檔案系統的疑惑
- Linux 檔案訪問原語(轉)Linux
- android怎麼訪問win10共享檔案_android如何訪問win10共享檔案AndroidWin10
- ios訪問win10共享檔案的操作步驟_ios如何訪問win10共享檔案iOSWin10
- Windows7 無法訪問共享檔案,域訪問解決方法。Windows
- 蘋果裝置訪問 Windows 檔案共享教程蘋果Windows
- 使用外部表訪問警告日誌檔案
- WinXP無法訪問Win7檔案Win7
- IIS釋出後有些檔案不可訪問
- PostgreSQL-訪問策略配置檔案pg_hba.conf檔案(八)SQL
- JavaScriptFAQ(六)——字串JavaScript字串
- JavaScriptFAQ(十八)——CSSJavaScriptCSS
- Default Folder X 5 for Mac檔案快捷訪問工具Mac
- Dropzone 4 for Mac(檔案拖拽程式訪問工具)Mac
- HighTop for Mac(快速檔案訪問軟體)Mac
- Default Folder X 5 for Mac(檔案快捷訪問工具)Mac
- 檔案拖拽程式訪問工具:Dropzone 4 for MacMac
- 樹莓派raspberry pi訪問Windows共享檔案樹莓派Windows
- Android7.0檔案訪問許可權Android訪問許可權
- Linux 訪問網路檔案共享服務Linux
- Javascript如何訪問和處理系統檔案JavaScript
- Titan-hadoop訪問DBpedia檔案內容Hadoop
- 多例項訪問同一組資料檔案
- 區域網訪問共享檔案需要密碼怎麼辦?取消區域網共享檔案訪問密碼的方法密碼
- win共享檔案沒有許可權訪問怎麼辦 win10共享檔案許可權訪問的方法Win10
- Python 獲取檔案建立、訪問、修改時間Python
- 在終端上訪問網站和下載檔案網站
- [java IO流]之 隨機訪問檔案(RandomAccessFile類)Java隨機randomMac
- nginx配置web訪問以及檢視目錄檔案NginxWeb
- 網路自由訪問巧解除WinXP檔案共享限制
- oracle database增加密碼檔案,遠端sys訪問。OracleDatabase加密密碼