トップページ > JavaScript > クラスライブラリ集 > テキストリーダー
 
テキストリーダー
ver.1.0
<機能と特徴>
外部テキストファイルからデータを取り込むクラス。

   
インフォメーション


公開日 2005.7.10
最終更新日 ---
バージョン ver 1.0
動作確認
IE5.0 IE6.0 NN4.7 NN6.2 NN7.0
Opera7.5 FireFox1.0
取扱難易度 ★★★★☆難易度4
cookie 不使用
CSS 使用(無効でも動作は可能)
更新履歴
---
 
リファレンス

 
ソース

<script language="JavaScript" type="text/javascript">
<!--
//copyright(C) 2005 あう http://www5c.biglobe.ne.jp/~horoau/
//ver1.0

//CSVリーダークラス
function text_reader()
{
 this.readyState = "ready";

 //csv読み込み準備
 this.setup = function (url,script)
 {this.func       = script;
  this.readyState = "loading";
  with(document)
  {if(url && document.getElementById)
   {if(!getElementsByTagName("body")[0])
    {setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").setup('"+url+"','"+script+"');",300);
     return;}
    else if((document.all && navigator.userAgent.indexOf("Opera") == -1) &&
            (document.readyState != "interactive" && document.readyState != "complete"))
    {setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").setup('"+url+"','"+script+"');",300);
     return;}
    this.data_frame = createElement("iframe");
    var i = 0;
    while(getElementById("frame_id"+i))
    {i++;}
    with(this.data_frame)
    {setAttribute("id","frame_id"+i);
     setAttribute("name","frame_id"+i);
     setAttribute("src",url);
     setAttribute("width","1");
     setAttribute("height","1");
     style.position   = "absolute";
     style.visibility = "hidden";}
    document.getElementsByTagName("body")[0].appendChild(this.data_frame);
    this.iframe = eval("window.frame_id"+i);
    if(!document.all)
    {this.iframe.document.getElementsByTagName("html")[0].innerHTML = '<body>';}
    this.iframe.check_loading = 1;
    this.check();}
   else
   {this.readyState = "error";
    return;}}}

 //読み込み状態チェック
 this.check = function ()
 {if(this.iframe)
  {if(!this.iframe.check_loading && (document.all && navigator.userAgent.indexOf("Opera") == -1))
   {this.readyState = "error";
    return;}
   if(this.iframe.document)
   {if(this.iframe.document.readyState == "complete")
    {this.reading();
     return;}
    else if(this.iframe.document.getElementsByTagName("html")[0])
    {if(this.iframe.document.getElementsByTagName("html")[0].innerHTML.match(/<\/body>$/))
     {this.reading();
      return;}}}}
  this.id = setTimeout("obj_bank.withdraw("+obj_bank.deposit(this)+").check();",10);}

 //データ取り込み
 this.reading = function ()
 {clearTimeout(this.id);
  if(!this.iframe.document.body.getElementsByTagName("pre")[0])
  {this.readyState = "error";
   return;}

  this.data_line  = this.iframe.document.body.getElementsByTagName("pre")[0].innerHTML;
  this.readyState = "complete";
  document.getElementsByTagName("body")[0].removeChild(this.data_frame);
  eval(this.func);}}


//オブジェクト預りクラス
function obj_bank()
{var bank = new Array();
 this.deposit = function (obj)
 {for(var i=0;bank[i];i++)
  {;}
  bank[i] = obj;
  return i;}

 this.withdraw = function (no)
 {var payment  = bank[no];
  bank[no] = "";
  return payment;}}

//インスタンス生成
obj_bank = new obj_bank();

// -->
</script>

 
開発日誌

[ 2005.7.10 ] ver.1.0

旧データバインドクラスからテキストを読み込むのみの機能を抜き出してみた。 外部テキストを読み込みたいって要望結構多いんだよね。 実際読み込めれば何かと便利ではあるし。 でも旧データバインドもCSVリーダーもしかりだけど 読み込む際にタイムラグがあるのがね。 この辺はブラウザの標準機能じゃないからしょうがないんだけど ある程度知識のある人じゃないと使いづらいってのがね。 将来的にはそういう機能も出てくるかなぁ? IEにはデータバインド機能があるわけだけど 他はそれを追随する気はない感じだからわかんないけどね。



ウェブ木箱
copyright(C) 2005 あう