[ TEXT保存 ]dated 2012-10-3  Mori Design Office
テキストファイルやcsvファイルを作成(データ保存)します。 実行はここをクリック
対応ブラウザ: IE, Firefox. Google chrome, Opera。 文字コード切替え: shift-jis, utf-8
☆ なお、Windows 8 API はここでは、除外してますので公式サイトを参照。 →Micorosoft: WL.upload function
下記はそのソース、JavaScriptコード です。

<html>
<meta http-equiv="Content-Type" content="text/html,JavaScript,HTML5; charset=shift_jis">
<title>TEXT保存</title>
<style type="text/css"></style></head>
<script type="text/javascript">
<!--
//本JavaScript コードは、HTML画面から テキストファイルの保存方法(3通り)を記述。

function save() {
  var $id = function(id) { return document.getElementById(id); }
   
  var Br; //現在のブラウザ
  var use= navigator.userAgent.toLowerCase();
  if(use.indexOf("msie")>=0){Br = "ie";}
  else if(use.indexOf("firefox")>=0){Br = "firefox";}
  if(use.indexOf("chrome")>=0){Br = "chrome";}
  else if(use.indexOf("opera")>=0){Br = "opera";}
  
  var data = $id("text").value;          //保存すべき中身
  
  //@ HTML5 (徐々に普及の途中) ----------------------------------------------------------
  if(Br==null){//API、適用ブラウザ:chrom22  (shift-jis 全角でutf-8)
    var filename = 'filename-api.txt';
    var a = document.createElement('a');//hrefの'a'に定義付け
    a.download = filename;
    a.href = 'data:text/plain,' + encodeURIComponent(data); //google chrom では下記式どれでもok
    // a.href = "data:application/octet-stream," + encodeURIComponent(data);
    //a.href = (window.URL || window.webkitURL).createObjectURL(new Blob([data]));
    var e = document.createEvent('MouseEvents');//initMouseEventのイベント生成の為の定義付け
    e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, true, false, false,  0, null);
    a.dispatchEvent(e);
  }

  //A IE 以外のブラウザに適用 (ダウンロード画面でファイル名を自分で記入の必要あり)--------
  if(Br=="firefox"||Br=="chrome"||Br=="opera"){
    //stream 適用ブラウザ:Firefox19、 chrome22、opera11  (utf-8)
    var br = Br;
    var filename = 'filename-stream.txt';
    if (data.length) {
      var obj = $id("anchor");
      obj.download = filename;  //chrome の場合のみ有効
      obj.href = "data:application/octet-stream;filename=filename.txt," + encodeURIComponent(data);
      if(br=="opera"){obj.innerHTML = "■ここを左クリックし、「保存」を選択、ファイル名には拡張子を付ける";}
      else {obj.innerHTML = "■ここを右クリックし、「名前を付けてリンク先を保存」を選択、ファイル名には拡張子を付ける";}
      if(br=="chrome"){obj.innerHTML += "<br>■filename.txtでダウンロードに保存には、左クリックする";}
    }
    else{alert("データを入れて下さい");}
  }
  
  //B EI のみに適用 (ダウンロード画面が出ない) ------------------------------------------
  if(Br=="ie"){//fso  (文字コード shit-jis)
    var filename = toEn(currentDirectory())+ 'filename-fso.txt';//フルパス・ファイル名、区切り円記号
    filename = window.prompt("[ 保存ファイル・パス名 ]   必要あれば修正、", filename);//名前ろ付けて保存の代替え
    if(filename){
      var fs = new ActiveXObject("Scripting.FileSystemObject");
      var outf = fs.CreateTextFile(filename, true);
      outf.Write(data); 
      outf.Close();
    }
    else{alert("キャンセルされました");}
  }
}


//以降、ディレクトリの表示方法の関連 -----------------------------------------------------

function currentDirectory(){
  var da,oo,dt,j;
  oo  =(location.href).replace("file:///","");//なお呼込み側localhostの時はhttp://localhost/fakepath/となりFSO不可
  
  da = oo.split("%"); dt = da.length-1; //"%" をスペース
  if(0<dt){j=0;oo = da[0]+" "; 
          for (j=1; j<da.length-1; j++){oo += da[j].substr(2,da[j].length)+" ";}
          oo += da[j].substr(2,da[j].length);
  }
  da = oo.split("/");  //location.hrefがfile:///c:/x.htmlの時da.lengthが2 (ie,firefox共)
  if(2<da.length){
          oo = da[0]+"/";
          for (j=1; j<da.length-1; j++){oo += da[j]+"/";}
  }
  else{oo = "";}
  return oo;
}

function fromEn(o){    //単に参考(円記号\をスラッシュに置換)
    var oo = o;
    var da,dt;
    
    var cr = String.fromCharCode(92); //円記号
    da = oo.split(cr);
    dt = da.length-1;
    if(dt>0 ){
          oo = da[0];
          for (j=1; j<da.length; j++){oo += "/"+da[j];}
    }
    return oo;   
}
function toEn(o){    //円記号\に置換
    var oo = o;
    var da,dt;
    da = oo.split("/");
    dt = da.length-1;
    if(dt>0 ){
          oo = da[0];
          for (j=1; j<da.length; j++){oo += "\\"+da[j];}
    }
    return oo;   
}

//-->
</script>

<body>
テキストファイルに保存<br>
<textarea id="text" cols="30" rows="5" wrap="soft">保存するデータをここへ
書き込んで</textarea><br>
<button onclick="save();">save</button>
<a id="anchor" href=""></a><!-- stream 保存の場合のみ comment -->