インストールレスプログラミング( ´ー`)

VBA , JavaScript , HTAなど 365アプリはインストール必要ですが、仕事に無いケースはほぼないから(・_・;)

疑似掲示板(失敗) JScript & HTA → 成功かも

興味がない分野について,自分の知識が全くないことに気づかせてくれるJSciptの学習。

今日は掲示板ぽいのを作ることをしていました。

neos21.hatenablog.com

こちらの記事を参考に,コードも使わせてもらいながら,自分の環境で作る。

JQueryを自分の環境でいまのところきちんと動かせなかったので,けっこうコードは行き当たりばったりで作ってます。

JScriptの学習と思ってこつこつやっていました。

例によってHTAです。HTMLでは動作しません。

メモ帳にはりつけて,拡張子HTAで保存します。文字コードUTF-8にしないと動かないようです。

追記 imihitoさんにコメントをいただいて,見直してみたらCloseに()が抜けていましたので修正しました。
  失敗を忘れないためにも下のほうの駄文は残しております。コードは書き直しました。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>メッセージ</title>
<!-- CSS -->
	<style type="text/css">
		dt{float: left;}
		dd{margin-left: 80px;}
		.user{display: none;}
	</style>
<!--JScript-->	
<script>
	// FileSystemObject 用定数
	var ForReading = 1;
	var ForWriting = 8;
	/** BBS のデータファイルのフルパス */
	var BbsFile = "bbs.txt";
	var User=new ActiveXObject("WScript.Network").UserName;
	/** ファイルの読み込み */
	function loadText() {
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		var bbs = fso.OpenTextFile(BbsFile, ForReading);
		var tmp=bbs.ReadAll();
		bbs.Close();
		return(tmp);
	}
	/** 投稿内容のロード */
	function load() {
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		if (fso.FileExists(BbsFile)==false){
			var bbs = fso.OpenTextFile(BbsFile, ForWriting,true);
			bbs.WriteLine("<dt>名前</dt><dd>メッセージ</dd><span class='user'>ユーザー名</span>\r");
			bbs.Close();
		} 
		document.getElementById("data").innerHTML=loadText();
	}
	/** 投稿 */
	function post() {
		var name=document.getElementById("name").value;
		var msg=document.getElementById("msg").value;
		var postData = "<dt>" + name + "</dt>" + "<dd>" + msg + "</dd>" +"<span class='user'>" + User +"</span>\r";
		var fso = new ActiveXObject("Scripting.FileSystemObject");
		var bbs = fso.OpenTextFile(BbsFile, ForWriting);
		bbs.WriteLine(postData);
		bbs.Close();
		load();
		document.getElementById("name").value="";
		document.getElementById("msg").value="";
	}
</script>
</head>

<body onLoad="load();">
	<h1>一言メッセージ</h1>
	<p>
		名前 <input type="text" id="name" size="14" value="" placeholder="Name">
		  メッセージ <input type="text" id="msg" size="60" value="" placeholder="Message">
	</p>
	<p>
		<input type="button" id="post" value="送信" onClick="post()">
		※エラーが出たら少し待ってもう一度 送信 を押してください。
	</p>
	<dl id="data"></dl>
</body>
</html>

こんな画面になるとってもシンプルなもの。
送信ボタンを押せば投稿されるよ,ということと ユーザー名を裏で記録してるよ,というもの。
f:id:chemiphys:20190107225337p:plain


一人で試してても
f:id:chemiphys:20190107225633p:plain
こういうエラーがまぁまぁ出ます。書き込み時の競合なのかなーと思うけどテキストのファイルサイズもそんなに大きくないし,

なんでそれなりの確率でこいつが出てくるのか不思議です。できる範囲でCloseもやっているのになぁ。WriteLineの直後にClose書いたら拒否されるのでそこはやってません。

複数ウィンドウを開いて試すとさらにダメ。ということは実際の使用には現状はたえない状態のようです。元の記事の方とは書き込み回りも違いますし,そちらに

寄せていけば改善されるのだろうか。 ※追記 Close();をきちんとすることで改善されていると思われます。

とりあえず,この形で作りたかったので,その試しとして記録するとして,今度は各クライアントが一つのテキストを吐き出すようにして,あるフォルダにその小さいテキストを集める。

すでに存在する場合は上書きするという形にして,競合の可能性をなくす。

小さいテキストをかき集めて掲示板のデータにする,という形で今度は作ってみようと思います。

読み込みの際は問題にならないんじゃないかなと思うので,エラーを回避できるかなぁと思ったり。

明日はそれに挑戦してみよう。。

実際使っている授業支援ソフトが,アンケート機能が通信環境の安定性を損ねるということでなくなっています。

その代わりになるものを手にしたいと思っていますので,40名程度を相手にアンケートぽいものをサーバーレスで作ってみたいと思ってるところなんです。

そこまでたどり着くかどうかはさっぱりですが,楽しいですし,やってみたいところ。。