2007年02月25日

Javascript:for のちょっと変わった使い方

for(var i = 0; i < 10; i++){処理・・・}
for(var i in object){処理・・・}

なんてのは、よく目にしますが・・・。

for(var i = ['あ', 'い', 'う']; i[0]; i.shift()){ alert(i[0]); }
これでも。i に配列を代入して、i[0] が false を返すようなものではない間、shift で i に代入された配列を削っていきます。ということで、この場合は、あ、い、う、と表示される。

当然。もっと自由に考えれば。
var o = {
  v : 2,
  fn : function (){this.v = this.v * 2},
  en : function (){
    if(this.v < 10) return true;
    alert(this.v);
  }
};
for(; o.en(); o.fn()){}
なんてのも。
わざわざこんな処理に冗長な例ですが・・・。for 内の処理や条件を外部で、作成・変更できたりと、結構自由に使えます。ただ。やり過ぎると、深刻な混乱を招いたりするので、誰が見ても分かりやすい物にした方が無難かも。

私は遊びで使ったりします。ひょっとしたら嫌う人もいるかもしれない。
posted by HiFa at 03:01 | 🌁 | Comment(2) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月21日

Javascript:Array オブジェクトの継承では length が予期しない値を返す

02/22 後尾に追記

アルファブロガー達※1が、一時取り上げていた3行の継承に関してですが、これで Array オブジェクトを複製しても組み込み済みのメソッドは、継承元でしか動作しないですね。

■ 試した関数
404 Blog Not Found さんより
javascript - プロトタイプ的継承

function object(o){
  function F(){}
 F.prototype = o;
 return new F();
}

※1 私だけの認識じゃないと思う。

続きを読む
posted by HiFa at 16:02 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月17日

Javascript:setTimeout による呼び出しは関数終了時ではない?

予定された時間になり、その時実行中の関数が終了すれば setTimeout/setInterval での呼び出しが実行されるという訳じゃないんですよね。

ネットでたまに見かけるのは、「function fn(){setTimeout(cb, 20); ・・・;} の場合、・・・の処理が終わって fn(); が終了していないと、20msec 経過しても cb は呼び出されない」などの内容で完結していることがありますが、実際は fn(); が終了していても呼び出されないことがあります。

ま。とある記事読んでいて、あれれ?と思ったので・・・。というか、自分自身も意識しないとそう言ってる。

続きを読む
posted by HiFa at 09:35 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月15日

Javascipt:関数ごとに終了状態をトレースしてゆく関数

関数終了時の変数の状態や arguments などを順次蓄積します。関数内の変数は簡易的にスキャンして、一括取得できるようになっています。
前回の「Javascipt:関数が終了した後でもそのローカル変数が参照できる」を発展させて、関数に eval(getChain()); と記述するだけで、トレース出来るようにしたものです。

機能は以下になります。
  • arguments, caller, callee を保存
  • 終了時の変数の値を個別・一括で取得
  • 複数の関数の終了時の状態を起動順序ごとに配列へ蓄積
確認環境
ie 5.0, 5.5, 6.0, 7.0
ff 1.0, 1.5, 2.0
ns 7.1
※ opera は caller が無いため動作しません。
参考:http://www.opera.com/docs/specs/js/ecma/

注意点
対象とする関数が起動されるたびに延々と蓄積し続けます。
Array.shift() などを使って配列を詰めてもいいかも知れません。

■2009/04/24追記
変数を監視する場合はこちら
javascript:変数を監視する関数

続きを読む
posted by HiFa at 10:59 | 🌁 | Comment(0) | TrackBack(1) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月10日

Javascipt:関数が終了した後でもそのローカル変数が参照できる

2/15 追記:関数化はこちら「Javascipt:関数の状態をトレースする関数」

例えば、fn(){var v=1;}を起動・終了後に v が参照出来るんですが、さらにそれを汎用にしてしまったものです。元ネタは以下リンクですが、caller(呼出し元)も一応は記録しておくことが出来るんじゃないかと。

JavaScriptでDebugScreen、その2(最速インターフェース研究会さん)

1年前の古い記事です。つい今しがた見つけてw衝撃を受けましたんで色々イジってみる。いつも参考にさせてもらってます。m(_ _)m

続きを読む
posted by HiFa at 11:19 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年02月09日

Javascript:appendChild のタイミングで処理速度が変わる

createElemement や createTextNode で要素を生成して、すでに描画?されているオブジェクトに入れ込む場合、入れ込むタイミングによって処理速度が変わるようです。

1.生成した div 要素を、先に body へ appendChild してしまってから、div へテキストノードを入れ込む場合(bf とします)
01   obj = document.createElement('div');
02   document.body.appendChild(obj);
03   obj.appendChild(document.createTextNode('string'));


2.生成した div 要素をにテキストノードを入れ込んだ後に、body へ appendChild する場合(af とします)
01   obj = document.createElement('div');
02   obj.appendChild(document.createTextNode('string'));
03   document.body.appendChild(obj);

感覚的には、2の方が速いだろうと思うのですが・・・。
ちなみに div 要素ではなく createDocumentFragment の方が良いかも知れませんが、微妙に遅い感じです。ほとんど、誤差範囲内ではありますがw

テスト結果
posted by HiFa at 00:35 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年01月30日

インラインフレームの読み込みに失敗することがある

HTML の a 要素で、onmousedown を使ってインラインフレームを読み込むと、読み込みに失敗することがあります。イベントが発生するタイミングが問題なのだろうと思いますが、href に何を入れるかによっても異なります

とりあえず、a タグでインラインフレームを書き換える場合、簡単に4つ試しました。
<a href="javascript:void(0);" onmousedown="func();">
<a href="javascript:void(0);" onclick="func();">
<a href="#" onmousedown="func();">
<a href="#" onclick="func();">


結局のところ、onclick を使えばいいのですが、世の中にはやっかいなプラグインがありまして・・・。全く関係の無い a タグを onclick してもページ遷移と誤解するのか、勝手に終了しちゃう奴があったりします。

続きを読む
posted by HiFa at 13:19 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年01月20日

Javascript:クエリストリングからパラメータ配列を生成する関数とその逆の関数

クエリストリング(URL の後尾 '?' 以降の文字列:Query String)を連想配列にする関数と、連想配列から Query String を作成する関数。

Javascript は「連想配列」ではありませんけど、この程度なら実質同じかなw
ま、知ってれば持ってる or サラっとやってのけられる関数です。

■ Query String について一応簡単に

http://www.google.co.jp/search?
   hl=ja&q=url+%E3%82%AF%E3%82%A8%E3%83%AA

など、上の場合 '?' 以降の文字列(QueryString)は、単に

 hl = ja
 q = url クエリ

と言う情報をネット上で使うのに問題の少ない文字列に直したものです。url にくっ付けてページ間で簡易なデータの受け渡しをしています。
続きを読む
posted by HiFa at 18:07 | 🌁 | Comment(0) | TrackBack(1) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2007年01月06日

Javascript:ちょっと便利な String の拡張

String オブジェクト(文字列)のちょっと便利な拡張を4種類。
  1. 文字数のカウント。
  2. 文字列にある全ての文字列 s1 を s2に置き換える。
  3. 文字列を反転させる。
  4. 文字列から数値を全て抜き出す。(文字配列として返す)
どっかのライブラリに似たようなものあるかも知れんけど。ま、いいっしょ。続きを読む
posted by HiFa at 01:43 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年12月24日

php : 文字エンコーディング関連

イブ前夜に何やってんだか。って、あ、もう12時回ったかw
ま、所帯持ちにゃかんけーねーや。w
あー。なんかいーことしてぇー(爆)


最近、自分の文字エンコードに関する知識の浅さに打ちのめされて、再度勉強中なんですが・・・。はぁ。思ったとおり、めんどーですね。

スクリプトからできるだけ制御しようと思っているんですが、結構考慮すべき関数や設定値が多い。ということで、文字エンコードに関して考慮すべきことや覚え書き。

環境
windows xp sp2
apache 2.0.53
php4 version 4.4.2

続きを読む
posted by HiFa at 02:07 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年11月17日

動的な JavaScript の生成と読み込み&入れ替え

以前 src や text を使って javascript の動的な読み込みや書き込みをしたんですが、そのサンプルと安全性?クロス?な調査です。

前回の記事はこちら
トウヘル さんから safari の情報を頂いています。

関数(09/12/26)
javascript:同期/非同期で動的なjavascriptの読込み3種
※ コードは url 指定


実際の所、createElement なんぞしなくても空の script タグ書いて、getElementsByTagName や、getElementById で取得したエレメントに src や text を突っ込んでやれば幾らでも「動的な読み込み」や「書き込み」は可能です。

ちなみに ie は、何度も書換えられますが、FireFox はどうやら1回だけ。1度読んでしまうと上書きのようなことは出来ないようです。実際、スクリプトエレメントを削除しても生きているようです。


続きを読む
posted by HiFa at 00:18 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年11月14日

最終形態?自由に繰返す関数として複製(遅延/繰返し/回数指定して function を複製する3)

1,2を包含して、さらに機能アップした機能過多w関数を作成しました。
但し、最初一回目は遅延させません。

繰り返しの場合は、1回目の遅延なんてやはりレアケースですねw
機能的には以下です。

  1. インターバル時間、呼出回数を指定して関数を複製する。
  2. 関数に現在の呼出回数を渡すことができる。
  3. 関数に予定された呼出回数と呼び出し間隔を渡すことができる。
  4. 関数から、予定された呼出回数と呼び出し間隔が随時変更できる。
  5. 終了時に他関数を起動できる。
  6. 関数が false を返せば、止められる。
  7. 関数が false を返さず、回数指定もなければ延々と繰り返す。
  8. 入れ子でも、this.self で this を取得できる。
  9. 入れ子でも、各段階の予定された呼出回数と呼び出し間隔が、関数から取得・変更できる
※ 上記での「関数」とは、複製された関数になります。

前回、ほぼ最終形とのたまったのは誰だったのか・・・
ま、色々いじってるとどんどん欲が出てくるw


■ 動作確認
IE 4.0/5.0/5.5/6.0
FF 1.0/1.5
NS 6.2/7.1
OP 7.02/8.53/9.01
Sleipnir 2.30

続きを読む
posted by HiFa at 16:38 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年11月10日

Ajax?文字化け対策とブラウザキャッシュ対策

■ 2009/01/17追記

ブラウザキャッシュに関してはこちらのサイトをご覧ください。
IEでAjaxリクエストをキャッシュさせない方法
http://www.phppro.jp/news/312
この記事なんかよりずっと適切です。
まー、これは腹立てた勢いで書いた記事(汗)なのに検索ほか結構見に来る方があり、これはイカンと・・・。
かなり放置して今更ですが、ちゃんとしたサイト紹介しますねー。
もし、もっと適切でいいサイトOR情報あるよって方はコメントでも頂ければ幸いです。

あー、そうそう。下部のコメントも見てください。
CLさまからリンクがあります。上のリンクはそちらから頂いてます。

---

最近はウェブデザイナーさんの口からも Ajax という言葉が、当たり前のように出てきます。ま、それに関係してと言うか、色々思うこともあり、Ajax に関係する事でもちょろっとUPしよかなーっと思った次第w

・ ブラウザのキャッシュを回避する方法
・ 文字化けを回避する方法


続きを読む
posted by HiFa at 09:29 | 🌁 | Comment(5) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年10月27日

こんなのもラク?遅延/繰返し/回数指定して function を複製する2

javascriptで。
・ 指定回数繰り返しさせる関数
・ true の間、延々と繰り返しさせる関数(カウンター付)

を前回の、「遅延させるだけの関数」から作成します。

「3歩または5歩進んで止まる」を100回繰り返します。

・ 指定回数繰り返しさせる関数
・ 角度をずらす関数
を使ってわずか2行で仕上がります。



■ 動作確認
IE 4.0/5.0/5.5/6.0
FF 1.0/1.5
NS 6.2/7.1
OP 7.02/8.53/9.01
Sleipnir 2.30
今回でほぼ最終形です。

続きを読む
posted by HiFa at 17:03 | 🌁 | Comment(3) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年10月25日

遅延/繰返し/回数指定して function を複製する1

ある関数を繰り返しさせる関数のほか、使途不明の逐次指定型の遅延関数?です。

最近、setInterval に関係したネタを2つほどUPしたので、今度は setTimeout を利用して、任意の function を遅延や繰り返しなどする関数に変形・複製する関数を書いてみました。



なんですが、ちょっと長くなったので。

・ 遅延させるだけの関数
・ true の間、延々と繰り返しさせる関数
・ 指定回数繰り返しさせる関数
・ true の間、延々と繰り返しさせる関数(カウンター付)
・ 逐一指定して遅延させる関数

と5つを2,2,1と分けてUPします。
てことで今回は、2つ。

続きを読む
posted by HiFa at 16:52 | 🌁 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年10月12日

表示領域の取得2

表示領域を取得するクロスな関数です。
今までは何とか回避してきたんですが・・・
x Library(cross-browser.com)で十分だったし。

クロスな検査をしたあとに、関数を上書きするようにしているので、一旦確定したあとは「多少」軽くなるかと。試してないのでなんとも・・・^^;

■ 動作確認

IE 4.0/5.0/5.5/6.0
FF 1.0/1.5
NS 6.2/7.1
OP 7.02/8.53/9.01
Sleipnir 2.30

続きを読む
posted by HiFa at 02:43 | 🌁 | Comment(1) | TrackBack(1) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年10月07日

Opera では、noscript タグの中身を取得することが出来ない?

ie、firefox、netscape では、noscript タグに書かれた文字列を javascript で取得することができますが、どうも opera では簡単に取得できないようです。

innerHTML、outerHTML、firstChild.nodeValue
すべて空文字。
親要素からなら取得できるかと思い、body 要素を見てもカラ・・・

opera のスタンスでは、script が有効なら noscript タグの中身は、不要だろってなもんで消してしまうのかな?

テストはこちら

こうなると、とりあえず noscript に書いておいて、script が有効ならそれを装飾して見栄えを良くするなんて手法は opera では使えないですね。

script が無効でも、無効なりにストレスなく読めるページが理想だし。
html ドキュメント中に書いたのと同じ内容を、script に持たせるのもアホらしいし。
noscript に書けば、自動で抜き出して装飾ってのが理想だったのになぁ。

ま、opera は無視!!!かな・・・
posted by HiFa at 13:57 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年09月30日

閑話休題 表示領域の取得

ブラウザの表示領域の取得方法は、ブラウザやモードに注意する必要があります。

ということで、記事をまとめていたら他に良い記事を見つけてしまった。

ということで、カラーピッカーその3を上げる前にUPしよってなもんで。

Enjoy×Studyさん
[JavaScript][css]ブラウザの表示領域のサイズを取得する方法。

続きを読む
posted by HiFa at 01:39 | Comment(0) | TrackBack(1) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年09月12日

クロスブラウジングのためのイベントテスト用 html

cross-browser.comなど、クロスブラウジングのためのライブラリや方法論は、色々な方が非常に有用なものを出されています。

んが。内容を良く分からずに拡張したりすると、とんでもないマヌケな事をしていたりします。コードの意図を読み切れずに、恥ずかしいコード書いてたなんてことは結構ザラ。って私だけかなぁー。

ということで、簡易なイベント確認用のツールです。

■2009/04/25
とりあえずここで紹介しているクロスな開発のためのライブラリ
cross-browser.comxlibrary

いろいろなライブラリのベンチ紹介(興味深い)
prototype.js vs jquery vs mootools vs YUI vs Dojo from WebTecNote
http://tenderfeel.xsrv.jp/javascript/404/
各種ライブラリは利用により結果クロスになります。



続きを読む
posted by HiFa at 21:38 | Comment(0) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする

2006年09月02日

JavaScriptFlashGateway で発生するクリック音

先日の JavaScriptFlashGateway を色々試していて、どうにも困った問題が一つ。

ActionScript から JavaScriptを呼び出すと、クリック音が発生する。IE。
(逆は発生しない。)

まあ調べたところ、同じところで悩んでいる人はいるものですね。
回避策はないか?と聞いていたようですが、ある回答者の話では、As-Js通信では getURLを用いていて enterや clickと同様の効果になるから ブラウザの標準動作としてクリック音は仕方が無い。といわれてました。

本当ならかなり痛い。

配布元の Macromediaでは探し切れませんでした。検索してもわずか1サイト。
JavaScriptFlashGateway面白いと思うんだけどなー。あまり需要はないのかな。

続きを読む
posted by HiFa at 01:16 | Comment(1) | TrackBack(0) | JavaScript雑感 | このブログの読者になる | 更新情報をチェックする
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。