自己書き込み型再び HTAネタ
以前失敗した自己書き込み型の掲示板ぽいやつです。
強引に解決?したものをメモで。
前回のものはローカルで使う場合は動くけどネットワーク上で動かすとADODB.Streamが警告を受けて止まってしまうというもの。
FilesystemObjectを使う限り,UTF-8は使えないからとしばらく前にあきらめていました。
でも,ある本で,JavascriptをShift_JISで組んでいるところを発見。meta文で指定すれば普通に使えるそうです。
それなら・・と作り直してみました。ちなみにShift_JISだと環境依存文字で結構致命的なことになるので,推奨されないUTF-16でやってみることにしました。
<!doctype html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge" charset="utf-16"> <title>Write Me</title> <style type="text/css"> *{font-family:"メイリオ",sans-serif;font-size:calc(18px+1vw);} #log{font-size: 5vmin;background-color: lightcyan} #input{width:80vw;font-size: 5vmin;background-color:cornsilk} </style> </head> <body> <div id="targetDiv"></div> <div id="log"></div> <script> var targetDiv=document.getElementById("targetDiv") var DataCount,ForReading = 1,ForWriting=2,ForAppending = 8 var User= new ActiveXObject("WScript.Network").UserName; var fso = new ActiveXObject("Scripting.FileSystemObject"); var fileName=location.pathname.split("\\").pop() targetDiv.innerHTML="<form name='form'>"+ "<input type='text' id='input' name='text' onFocus='func()'>"+ "<input type='text' name='dummy' style='display:none'>"+ "<input type='button' href='#' value='送信' onclick='writeMe()' style='font-size:5vmin'></form>" const timerID=setTimeout(func2,1000) var inputbox=document.getElementById("input") inputbox.addEventListener('keydown',onkeydown) //end of root function func(){clearTimeout(timerID)} function func2(){location.reload()} function onkeydown(e){ if (e.keyCode=='13'){writeMe()} } function writeMe(){ var res=document.form.text.value var ForReading = 1,ForWriting = 8,ForAppending = 2 var data = fso.OpenTextFile(fileName, ForReading, false,-1) var srcdata = data.ReadAll() data.Close() var srcArr=srcdata.split("\r\n") var lineCount=srcArr.length for (var i=lineCount-1;i!=-1;i--) { if (srcArr[i].indexOf("★☆★□■データ書き込みこの下■□★☆★")>0){ var データ開始行=i break } } srcArr.splice(i+1,0,User+","+res) var data2 = fso.OpenTextFile(fileName, ForAppending, true,-1) data2.Write(srcArr.join("\r\n")) data2.Close() location.reload() } </script> <p id='data' hidden flg='★☆★□■データ書き込みこの下■□★☆★'> </p> <script> var logdiv=document.getElementById("log") var logdata=document.getElementById("data").innerHTML logdata=logdata.split("\n") var htm="" for (var i=0;i<logdata.length;i++){ if (logdata[i].split(",")[1]!=undefined) htm=htm+logdata[i].split(",")[1]+"<br>" } if(logdata=="") {logdiv.innerHTML=""}else{logdiv.innerHTML=htm} </script> </body> </html>
けっこう短いですが,これで全部。メモ帳などに貼り,拡張子HTAでUnicodeで保存します。
文字コードを間違ってなければたぶん動きます。データは
<p id='data' hidden flg='★☆★□■データ書き込みこの下■□★☆★'> </p>
この間にどんどん入っていくはずです。
単独ファイルで動く掲示板というものを実現できた気がします。
サーバー内の散逸するファイルへのリンク集とか作るのに面白いですね。
自動更新を数秒ごとにするので,複数人で開いても普通にチャットっぽくなる。
コードも短くお手軽なので,使い道は考えていませんがお気に入りのコードでした。