-->
ラベル javascript の投稿を表示しています。 すべての投稿を表示
ラベル javascript の投稿を表示しています。 すべての投稿を表示

2011-11-24

javascriptのtry{...}catch(e){...}の変数eのスコープ

ブラウザによってcatch(e)のeの参照できる範囲が違うので、
finallyなどで代用できる場合はそうしたほうが良いかもしれない。

もしくはeのスコープが限定的になるように無名関数で囲む。
(function(){
  var e;
  try
  {
    ...;
  }
  catch(e)
  {
    ...;
  }
})();

もしくは"e"を予約語として扱う。
"for","if"のように変数名に使えないものとして扱う。
try,catchが入れ子になっていたら困るかもしれない。


Firefox8の場合。catch(e){var e; ...} っぽい感じ。
Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0
number : 1
number : 1
string : throw
number : 1
number : 2
number : 2 

IE8の場合。var e; catch(e){...} っぽい感じ。
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
number : 1
undefined : undefined
string : throw
string : throw
number : 2
number : 1

2011-11-22

convertCsvToTable.js


ダウンロード。
https://docs.google.com/open?id=0BwK7sPpG0c5ZYjJmZjMxYTItZGU4ZS00N2IyLThlNGItZDFiYmM3MjVmYjlm

説明。
mail
メールソフトを開きます。
下書きなどで保存します。
内容はcsv固定です。
html
htmlのソースを表示します。
メモ帳などにコピーアンドペーストします。
htmlファイルに保存してブラウザで表示してもjavascriptの機能はありません。
save
csvを表示します。
メモ帳などにコピーアンドペーストします。
load
csvをペーストします。
成功すると表示が更新されます。
reset
初期表示に戻します。
成功すると表示が更新されます。
save-json
json(javascriptの配列データ)を表示します。
メモ帳などにコピーアンドペーストします。
必要ない場合は関数の引数の該当部分をfalseにしてjquery.json-2.3.jsのタグを削除して下さい。
load-json
jsonをペーストします。
成功すると表示が更新されます。
必要ない場合は関数の引数の該当部分をfalseにしてjquery.json-2.3.jsのタグを削除して下さい。
csvの1行目
列のタイトルがあるものとして処理します。
固定です。
列のタイトルをクリック
データをソートします。
もう1度クリックすると逆順にソートします。
ソートの種類
種類は1種類で固定です。
列全体が数字に似ているデータの場合、表示が右寄せになる場合があります。
そうなると数値的にソートしますのでご注意下さい。
文字列の場合ひらがなとカタカナやアルファベットの大文字小文字などを無視してソートします。
問題がある場合、別のデータを追加してソートして下さい。
データ部分をクリック
背景色を変更します。
もう1度クリックすると戻ります。
tableの1列目
行番号を表示します。
行番号をクリック
行全体の背景色を変更します。
データ部分のクリックを無効化します。
もう1度クリックすると戻ります。
/*$.ajax({url:"test.csv" ... */とは?
javascriptのコメントです。
1つ上の行をコメントアウトして、この行を有効にすると動的にcsvファイルをロードします。
外部ドメインや、もしくは同一ドメインであっても自身の管理外のファイルを指定してはいけません。
エラー時などの処理がありません。手動で追加して下さい。下記は公式サイトのマニュアルです。
http://api.jquery.com/jQuery.ajax/
対応ブラウザ
確認したブラウザは以下の通りです。
windows xp professional の IE8
windows xp professional の IETester v0.4.11 の IE6,IE7,IE8
windows xp professional の Opera 11.52
windows xp professional の Google Chrome 11.0.696.68
windows xp professional の Safari 5.0.5
windows xp professional の Firefox 8.0
gentoo linux の www-client/opera 11.52.1100
gentoo linux の www-client/chromium 15.0.874.120
gentoo linux の www-client/firefox 7.0.1-r1
似た環境のOS/ブラウザで動作する可能性が高いです。
その他
データに半角のダブルクォーテーションやバックスラッシュがある場合、利用者ごとの期待した結果にならない場合があります。
フォーマットの変更やデータの追加、変更、削除はできないです。excel, open office, libre officeなどで対応して下さい。
エラーやバグや不具合や使いにく点がある場合このページのコメントなどでご報告頂けるとありがたいです。

2011-11-18

javascriptのinclude

テスト用のinclude関数です。
実際にローカル以外で使用すると非同期ではないので、
読み込みごとに停止しているのが目立つようになりますので使えません。
var include = function(){
  var hostnamePattern = new RegExp(
    "^https?://" +
      location.hostname.replace(
        new RegExp("[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\-]", "g"),
        "\\$&") +
      "/"),
  protocolPattern = new RegExp("^[A-Za-z]+://"),
  statusOkPattern = new RegExp("^[^23]"),
  getErrorFunc = function(jqXHR, textStatus, errorThrown){
    var status = String(jqXHR.status);
    if (status.match(statusOkPattern))
    {
      jqXHR.responseText = "";
      throw textStatus + " " + status + " " + errorThrown + ".";
    }
  };
  return function(path){
    var ret = "";
    if (path.match(hostnamePattern) || !path.match(protocolPattern))
    {
      ret = $.ajax({
        type: "GET",
        url: path,
        dataType: "text",
        async: false,
        error: getErrorFunc
      }).responseText;
    }
    else
    {
      throw "other site url. \"" + path + "\"";
    }
    return ret;
  };
}();

例。
...
eval(include("mb_convert_kana.js"));
...

非同期で読み込むがファイルに依存性がある場合RequireJSなどがあるようです。
http://requirejs.org/docs/api.html
http://zudolab.net/blog/?p=451

もしくは2回目以降のアクセスは304になることを期待して1つのファイルにまとめて<head>に書くというのもありだと思います。
非同期でも同期でも100ファイル読み込んだら200か304を100回webサーバーから受け取るということに変わりないと思うので。
$ echo "var a=1;" > 00_a.js
$ echo "var b=a+1;" > 01_b.js
$ ls -1 *.js | grep -v ^all.js$ | while read -r f; do cat $f; done > all.js
$ cat all.js
var a=1;
var b=a+1;

2011-11-13

mb_convert_kana.js


ダウンローはこちらから。
https://docs.google.com/open?id=0BwK7sPpG0c5ZYWRiNDcyZWYtODY2Ni00MmRkLWIwMjMtYTcwNWExZTgwMzZm

説明。
http://php.net/manual/ja/function.mb-convert-kana.php

2011-11-10

jquery-1.7.min.jsの短くなりそうな点 part2


91186 byte になった。
null,数字,文字列が複数ある場合変数にする。文字列は完全一致するもの同士のみ。
true,falseが!0,!1になっているので真似する。0.5 => .5 に省略する。
ハッシュのキーは文字列ではない場合、予約語を使うとIE系でエラーになる。
IE系で、そのスコープでは使わないからといって同じ名前の変数名に上書きすると、
ある程度の量で全く別の変数を見るかもしれない。それは124回目からかもしれない。
window.defineという変数があるかどうか見ている。たぶんrequireJS関連。

2011-11-28 追記
91096 byteになった。
使っていないかもしれないvarの部分を削除した。
u.test("\u00a0")などの部分が逆に長くなった。

2011-12-02 追記
91080 byteになった。
\u00a0 => \xa0, \u00c0 => \xc0