[JavaScript]海外のAjaxライブラリを日本語対応させる方法。(AjaxPagesとjQueryのサンプル)
SafariでJSONの通信をすると文字化けるので対応策を考えてみた。ちなみに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); } }; } } })();