木曜日, 7月 03, 2008

【JavaScript】 ローカルに保存する機能をもつLog4js このエントリーを含むはてなブックマーク


 Log4jsのFileAppenderを発見。なるほど、ローカルに書き出しはこうすればよいのか。
こちらで、富田さんがブラウザからのローカル保存に触れられていたので興味はあったけど、今までやり方が分からなかった。ちなみに、こんなこともできるらしい。
業務系Webアプリでファイルアップロード後にローカルファイルを削除する


Log4js.FileAppender = function(file) {

  this.layout = new Log4js.SimpleLayout();
  this.isIE = 'undefined';
  
  this.file = file || "log4js.log";  
  
  try{
    this.fso = new ActiveXObject("Scripting.FileSystemObject");
    this.isIE = true;
  } catch(e){
    try {
      netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
      this.fso = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
      this.isIE = false; //mozilla & co
    } catch (e) {
      log4jsLogger.error(e);
    }
  }
};


Log4jsはシンプルで実によくまとまっている。prototype.jsからコピーしたと思われる、継承(extend)、bind、それからattachEventがあるだけだ。実際これで基本的なことは大抵できる。
$()も放棄してシンプルに実装している点も感心である。JavaScriptアプリはライブラリをインクルードしないでコンパクトにする、こういったコピペスタイルが流行ってくるのではないだろうか。
追記:というわけで、短いライブラリを作ってみた。=>とっても短いAJAXライブラリ extractive.js


/**
* Object extention (OO) methods if no prototype avaliable.
*
* @private
* @ignore
*/
if(!Object.prototype.extend) {
  Object.extend = function(destination, source) {
   for (property in source) {
   destination[property] = source[property];
   }
   return destination;
  };
  
  Object.prototype.extend = function(object) {
   return Object.extend.apply(this, [this, object]);
  };
}

/**
* Define bind if no prototype available.
* @private
* @ignore
*/
if(!Function.prototype.bind) {
  /**
   * Functions taken from Prototype library,
   * didn't want to require for just few functions.
   * More info at {@link http://prototype.conio.net/}
   * @private
   */  
  Function.prototype.bind = function(object) {
   var __method = this;
   return function() {
    return __method.apply(object, arguments);
   };
  };
}

  /**
   * Attatch an observer function to an elements event browser independent.
   *
   * @param element element to attach event
   * @param name name of event
   * @param observer observer method to be called
   * @private
   */
  attachEvent: function (element, name, observer) {
    if (element.addEventListener) { //DOM event model
      element.addEventListener(name, observer, false);
    } else if (element.attachEvent) { //M$ event model
      element.attachEvent('on' + name, observer);
    }
  }


0 件のコメント:

 
© 2006-2015 Virtual Technology
当サイトではGoogle Analyticsを使ってウェブサイトのトラフィック情報を収集しています。詳しくは、プライバシーポリシーを参照してください。