VBScriptはNG・・・タイピング文字

次のスクリプトは、いわゆるタグ講座と呼ばれるような主にHTML初心者を ターゲットとしたサイトなどで時々見掛けるVBScriptです。 確かタイピング文字と記されていましたが、このスクリプトは著作権表示もされて いませんでしたので作者は不明です。

<script type="text/VBScript"><!--
Dim counter, txt, txt_len, timerID

Sub Window_onLoad()
 txt = txtbox.innerHTML
 txt_len = Len(txt)
 counter = 1
 timerID = Window.SetInterval("typewriter()", 200)
End Sub

Sub typewriter()
 Dim cur
 If counter > txt_len Then
  cur = ""
  Window.ClearInterval(timerID)
 Else
  cur = "_"
 End If
 txtbox.innerHTML = Left(txt, counter) & cur
 counter = counter + 1
End Sub
' --></script>
<p id="txtbox">
この文章がタイプライターで<br>
タイピングするような感じに<br>
表示されます。
</p>

VBScriptで書かれていますから当然WindowsのIEのみでしか動作しません。 マイクロソフト社のサイトでも、「VBScriptは社内LANなど限られた環境では構わないが インターネットで使用すべきではない」といったようなことが書かれているページを 見たことがありますが当たり前ですね。

もう何ヶ月も前のことですが、ある掲示板でこのVBScriptと他のJavaScriptを合成して 使いたいが方法が分からないという質問がありました。 そこで、異なるスクリプト言語から変数を上手く受け渡しさせて動作させるほどの 自信はありませんでしたし、WindowsのIE依存であるVBScriptは薦められませんので、 このVBScriptをJavaScriptに移植して、それを改造するという手段を取りました。

次のスクリプトがそのとき筆者がJavaScriptに移植したものです。 勿論どの現行ブラウザでも動作しますので、上のVBScriptのような「タイピング文字」 を使いたいと考えるなら、こちらのJavaScript移植版をご利用ください。

<script type="text/javascript"><!--
var counter, txt, txt_len, timerID;

if (window.addEventListener) window.addEventListener("load",Window_onLoad,false);
else if (window.attachEvent) window.attachEvent("onload",Window_onLoad);

function Window_onLoad() {
 txt = document.getElementById("txtbox").innerHTML;
 txt_len = txt.length;
 counter = 1;
 timerID = setInterval("typewriter()", 200);
}

function typewriter() {
 if (counter > txt_len) {
  var cur = "";
  clearInterval(timerID);
 }
 else var cur = "_";
 document.getElementById("txtbox").innerHTML = txt.substring(0,counter)+cur;
 counter++;
}
// --></script>
<p id="txtbox">
この文章がタイプライターで<br>
タイピングするような感じに<br>
表示されます。
</p>

2つのスクリプトを見比べてみると、VBScriptでなければならないような特殊な メソッド(?)はほとんど使用されていないことが分かると思います。 実際、移植作業もスムーズに行えましたので、作者がわざわざVBScriptで書いた 理由がよく分かりませんでした。

この文章がタイプライターで
タイピングするような感じに
表示されます。

※ 実際のスクリプトではページが読み込まれたときにのみ一度だけ動作します。