すべてがカナ(かな)になる:更新
以前リリースした、すべてがカナ(かな)になるですが、ボタンを作ったついでに、少々javascriptを修正したので、それについてのエントリーです。
修正した理由は、「すべてがカナになる」と「すべてがかなになる」を一つのページ内で共存させるための修正と、今後つける予定のリセット(元に戻す)ボタンのためです。では、その詳細を。
subetegakananinaru.js ver1.1
もとのsubetegakananinaru.jsのソースは以前のエントリーを見てもらうとして、今回はこのように修正しました。
var changeKANA = changeKANAfunc();
function changeKANAfunc(type){
// 変換対象
var body_html = "";
// XMLHttp通信
var http = (function(){
var request_type;
var browser = navigator.appName;
if(browser == "Microsoft Internet Explorer"){
request_type = new ActiveXObject("Microsoft.XMLHTTP");
}else{
request_type = new XMLHttpRequest();
}
return request_type;
})();
// changeKANA関数
return function(type){
// bodyタグ内のhtmlタグ取得
if(body_html == ""){
body_html = document.getElementsByTagName("body")[0].innerHTML;
}
// mecab api へリクエスト設定
http.open("POST","/labs/mecab/api_kana.php",true);
// リクエストヘッダ指定
http.setRequestHeader("content-type","application/x-www-form-urlencoded;charset=UTF-8");
// mecab api からレスポンスがあった時の処理
http.onreadystatechange = function(){
if(http.readyState == 4){
var xmlObj = http.responseXML;
var kana = "";
// 受け取ったxmlから結果を結合
for(i=0;xmlObj.getElementsByTagName('result')[i];i++){
kana += xmlObj.getElementsByTagName('result')[i].firstChild.data;
}
// bodyタグ内に反映
document.getElementsByTagName("body")[0].innerHTML = kana;
}
};
// mecab api へのリクエスト実行
http.send("type="+type+"&str=" + encodeURIComponent(body_html));
};
};
文字列変換対象の保持
まず、以前の設計だと、一度「カナ」に変換した後に「かな」に変えようとするときに、すべてカタカナになった文字列を、mecab apiに投げていたので、変換の精度が悪く、一部カナが残ったりしていました。
そこで、元の変換対象をずっと保持するように修正する必要がありました。しかし、グローバルな変数を追加するのはイヤだったので、クロージャを使ってみました。
元々はこう書いてました。
var changeKANA = function(type){
・・・
};
changeKANA関数を定義して、それを呼び出していただけです。それをこう変えました。
var changeKANA = changeKANAfunc();
function changeKANAfunc(type){
// 変換対象の文字列
var body_html = "";
・・・
// changeKANA関数
return function(type){
・・・
body_html = kana;
};
};
まずchangeKANA関数は、changeKANAfunc関数の返り値としています。そして、changeKANAfunc関数の中で保持したい値(変換対象の文字列)を定義しています。
こうすることで、グローバルで定義せずにbody_htmlの値を保持することができます。
ボタン化完了。次はブログパーツ化?
これで、安定したカナ←→かな変換ができるようになったはずw
それにブログパーツ的にも出来そうですし。。。どうしていこうかなー・・・夢広がるなー。
Tags: [javascript](/tag/javascript), [mecab](/tag/mecab)
« [centos5でcronエラー:「Missing Dependency」が出てた](/415/centos_missing_dependency_erro)
[ライフログサービス:オラグーンのPCプレビュー更新](/438/oragoon_pc_preview_update) »
[画像未復旧: similar.png](http://blog.playispeace.com/img/similar.png) 関連ありそうなエントリー