[JavaScript]海外のAjaxライブラリを日本語対応させる方法。(AjaxPagesとjQueryのサンプル)

SafariJSONの通信をすると文字化けるので対応策を考えてみた。ちなみにSafari3betaでは文字化けは解消されてました。

コード

以下のコードをライブラリを読み込んだ最後に実行させると、対応されます。コーディングは文字化けとかを全く意識しないで大丈夫。

//Cross Browser Script Support
(function(){
  // the garble control for safari (XMLHttpRequest#responseText)
  var func01 = function(text){
    var esc = escape( text );
    if( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ){
      text = decodeURIComponent( esc );
    }
    return text;
  };
  
  // For AjaxPages.js
  if(window.AjaxPages != undefined){
    if(navigator.appVersion.indexOf("KHTML") > -1 ){ // for safari
      var _load=AjaxPages.prototype.load;
      AjaxPages.prototype.load = function(){
        return this.template = func01(_load.apply(this, arguments));
      };
    }
  }

  // For jQuery.js
  if(window.jQuery != undefined){
    if(navigator.appVersion.indexOf("KHTML") > -1 ){ // for safari
      var _httpData=window.jQuery.httpData;
      window.jQuery.httpData=function(r, type){
        try{
          var ct = r.getResponseHeader("content-type");
          var data = !type && ct && ct.indexOf("xml") >= 0;
          data = type == "xml" || data ? r.responseXML : func01(r.responseText);

          // If the type is "script", eval it in global context
          if ( type == "script" )
          jQuery.globalEval( data );

          // Get the JavaScript object, if JSON is used.
          if ( type == "json" )
          eval( "data = " + data );

          // evaluate scripts within html
          if ( type == "html" )
          jQuery("<div>").html(data).evalScripts();

          return data;
        }catch(e){
          return _httpData.apply(this. arguments);
        }
      };
    }
  }
})();