時々、某Webマスターから「こういうのがやりたい」と相談を受けるが…
某Webマスターが自分でできる範囲での思いつきなら、こちらの苦労も無いのだが、時として「絶対私に作れって言っているんでしょ」というような“相談”がある。
JavaScriptが絡んでくると100%それだ。結局私が調べ物をしてサンプルを作成することになる。サンプルといってもそのものズバリのものである。某Webマスターはそれをちょこちょこと修正すれば終わるというパターン。ところがそのものズバリの解答を示してもそれが答えだと思ってくれないことがあり、結構疲れる。
今回の“相談”は「管理表を印刷する直前に注意書きを表示させる」という仕組みである。
某Webマスターが言うには「管理表」に有効期限を設定する必要があるとのこと。本来はプリントアウトなどせず、常に最新の管理表をイントラで見てもらうのがルールらしいのだが、現場だとそうもいかず、プリントアウトして壁に貼っておきたいとの事。
しかし、「管理表」は頻繁に更新されるため何時までも古いものを貼られていては、管理上問題がある。
そこで、「印刷すると『この管理表の有効期限は○月○日です』と印字されるようにすれば良いのでは」と某Webマスターは思いついたのである。
あくまでも印刷するとそのメッセージが印字されるのであって、ページそのものには埋め込みたくないというのが某Webマスターの要望であり拘りである。
さて今回も某Webマスターの“拘り”のために私が苦しめられることになった。
管理表は多品種のため、フレーム構成で上側にプルダウンメニュー、下側に管理表が表示されるようになっている。この仕組みは変えないというのが大前提である。
プリントアウトさせる方法としては上側のフレームに「印刷」させる機能を組み込むことにする。
<HEAD>~</HEAD>に
<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
<!–
function flamePrint() {
parent.down.focus();
parent.down.print();
}
//–>
</SCRIPT>
プルダウンメニューの隣に
<a href="javascript:void(0);" onClick="javascript:flamePrint()">下フレームを印刷</a>
これで下側のフレームの印刷ができた。
さてメッセージを埋め込む方法であるが、これが非常に困った。
そんなの見たことも無い。
ネット検索をひたすらやってみたところ「innerHTML」なるものを発見。
簡単なサンプルを作ってみたら案外あっさり動いたため、フレームでも使えるように応用。
上記の flamePrint() を次のように変更
d = new Date();
myMsg = "サンプルです " + d ;
parent.down.document.all("myIDstr").innerHTML = myMsg;
parent.down.focus();
parent.down.print();
そして下側のフレームに表示させるページの先頭に次のものを追加
<DIV id="myIDstr" style="position:absolute; left:0px; top:0px;">□□□□□□□□□□</DIV>
(□は空白です。)
これで上側のフレーム内に有る「下フレームを印刷」をクリックすると、下側のページに「サンプルです」と日付が表示され、プリントアウトが始まる。
ここから先は某Webマスターさんが自分で「やりたいこと」になるように改造することでしょう。日付の関数は自分で調べたそうですし…