類似的功能需求在 server side 解決會簡單些,
一定要在 client side 實現,似乎也並非完全不可能。
以下是一個簡單的範例:
代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-Hant" lang="zh-Hant">
<head>
<title>Save to local file</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function mozillaSaveFile(filePath,content)
{
if(window.Components) {
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file.initWithPath(filePath);
if(!file.exists())
file.create(0,0664);
var out = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
out.init(file,0x20|0x02,00004,null);
out.write(content,content.length);
out.flush();
out.close();
return true;
} catch(ex) {
return false;
}
}
return null;
}
function mozConvertUnicodeToUTF8(s)
{
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
converter.charset = "UTF-8";
} catch(ex) {
return manualConvertUnicodeToUTF8(s);
} // fallback
var u = converter.ConvertFromUnicode(s);
var fin = converter.Finish();
return fin.length > 0 ? u + fin : u;
}
function saveFile(filePath,content)
{
return mozillaSaveFile(filePath,content);
}
function getPath(from)
{
return document.getElementById(from).value;
}
function getText(from)
{
var elm=document.getElementById(from);
return mozConvertUnicodeToUTF8(elm.value);
}
function clearMessage()
{
var status = document.getElementById('status');
status.textContent = "";
}
function DownLoadFile()
{
var filePath = getPath('selectFile');
var content = getText('myText');
var isComplete = saveFile(filePath,content);
var msgElm = document.getElementById('status');
msgElm.textContent = isComplete?"** 存檔完成**":"** 存檔失敗 **";
}
</script>
</head>
<body>
<pre>
1.輸入文字:
<textarea id="myText" onkeyup="clearMessage()"></textarea>
2.選擇檔案:
<input id="selectFile" type="file" onchange="clearMessage()"></input>
3.<a href="javascript:DownLoadFile();">下載存檔</a>
狀態:<a id='status'></a>
</pre>
</body>
</html>
1.主要的程式碼片段取自 TiddlyWiki
2.此程式碼只是在 gecko based 的 browsers 的變通方式試作。
3.若欲儲存的字串內容包含 utf8 字元,又有 cross borwsers 的需求,建議改以 java applet 來處理。
TiddlySaver.jar(
source) 提供兩個函數 lodeFile(), saveFile() 可於一般文件中 javascript 叫用。
4.若欲「按下連結出現後下載的對話框」,可將 <input ... type="file" /> 改由 javascript 動態產生即可。