2008-01-01から1年間の記事一覧

低速復活中

最近は某所でRubyとかPHPを書いている気がします。JavaScriptはちょこっとです。もっぱら使っているのはjQueryとPrototype.jsです。気がついたら、すごいことになっているuupaa.jsは使いたいんだけど、今のところ牛刀割鶏になりがちなので、使う機会が無いの…

脆弱性通報について

IPAのページから行える。 https://isec.ipa.go.jp/vuln/index.html が、しかし、IEのパッチレベルとかどうやって調べればいいのかわからないものまで、入力必須項目となっている。そのうえ、再現状況も細かく書かないといけないらしいが、あいにく僕は一台の…

CSSXSSを改良した?手法でmixiのpost_keyを抜き取るデモを作りました

IDを抜き取る方法が思いつかなかったので、「はまちちゃん」の書き込みの二年来の再来とはいきませんが、セキュリティーホールだと思うので、早めに書いておきます。(修正済みです) 実証コード http://k75.s321.xrea.com/cssxss/mixi.htmlパッチ済みのIE6…

jQueryの$("E F")と$("E").find("F")は等価じゃない

ちょっと前にはまったから、メモメモ。jQueryは重複する要素のマージをそこまでまじめに行わない。まぁ、マージするということは要素サイズ回のループを行うわけで速度のためには仕方ない。そんなわけで、"E F"をパースするときはタグをマージしつつやるが、…

DOMElement#uniqueIDではまること

js

要素を区別するために固有のIDをつける必要がある。jQueryだと$.data(obj)という方法でやっている。やっていることはobj["jQuery" + (+new Date)]という値に連番を入れることなんだけど、これだと関数呼び出しのコストが半端無いことになる。というわけで、$…

セレクターをちょっとだけ作り直した

http://kquery.if.land.to/slickspeed/ http://kquery.if.land.to/slickspeed/system/kquery.js 精度が改善しました。速度はちょっと遅くなったかもしれません。今までは$.findでDOMElementの配列を返した物で計っていましたが、それは改めてK(selector)でjQ…

POST送信のページをブックマークするブックマークレット

あるサイトでは検索がPOSTで送信しないと結果が返ってこないので、ブクマできない。というわけで、ブクマするためのブックマークレットを作った。 javascript:for(var i=0,f;f=document.forms[i];++i)if(f.method.toLowerCase()=="post")(function(f){f.onsu…

ビルトインオブジェクトに拡張したい10のメソッド

js

ビルトインオブジェクトをこねくり回すのはあまり好まれない方法だけど、僕は好きなので、割とやりたくなる。というか、やる。でも、やりはじめると際限なく拡張したくなってしまう。というわけで、最近は、とりあえず10と決めているので、それを書いてみる…

DOMでFlashを再生するobjectタグを生成する際の注意点

多くのウェブブラウザ <object type="application/x-shockwave-flash" data="test.swf" width="128" height="128"><param name="movie" value="test.swf" /></object> こんなコードをcreateElementで作って、appendChildしたら再生される。 シェアが一番大きいけど、なんというか、微妙なブラウザ

半透明PNGとopacityでIEではまった

半透明PNGが背景に設定されている要素をフェードインさせようと思ったが、IEだと半透明部分が黒くなるので、ちょっと試した。 http://kquery.if.land.to/test/png/ 一つ目はdivに背景とopacity(IEにはfilter)を設定した。IE7だと半透明部分が黒くなる。 二…

最近のCSSの書き方

css

IE5を気にするとき、IE5.5を気にするとき、IE6以上で良いときで使い分ける。 HTML <link rel="stylesheet" type="text/css" href="styles.css" media="all"> styles.css @import url("all.css"); /*全体的なレイアウトの調整。フォントサイズとリンク色とか。IE4も読ませる*/ /*以下はIE6+向けのとき。中身は@mediaで絞る*/ @import</link>…

jQueryをIE5で動くように再発明しているわけ

自分のウェブサイト(非プログラマー向け)にjQueryで機能追加行った ↓ いいという意見もあるが、いまいちという意見もある(遅いとか) ↓ Google Analyticsをつけてみた ↓ ブラウザ内訳でIE6が50%、IE7が30%、IE5.5が3%のシェアを占めていることが分かる(…

==と===のまとめ

高速化 - uupaaの開発日記で==よりも===が良いと知る。 ↓ 早速実験するけど、速くならないよ、と記事を書いた。 ↓ 等価演算子と厳密等価演算子 in ECMA-262 3rd Edition - 0x集積蔵で型が違えば、厳密等価演算子の方が有利だと説明があった。 ↓ 納得しつつ、…

JavaScriptで文字列比較は抽象的等価比較の方が速い

以下は間違っているのでこれを参照して下さい。等価演算子と厳密等価演算子 in ECMA-262 3rd Edition - 0x集積蔵でString同士をやっていないので、やったら、結果が逆転しているような気がする。ただ、アルゴリズムを見る限りはどちらも同じような感じの経路…

厳密比較演算子が必要な場面

js

つまり、比較演算だと同じものとされるものの組み合わせ。 null==undefined ==false、==0、[]=="" false==[]、false==0、false==""、false=="0" 0==[]、0==false、0==""、0=="0" ""==[]、""==false、""==0 "0"==false、"0"==0 空のオブジェクトは含まれない…

え?

<html> <head> <style></head></html>

等価演算子(==)と厳密等価演算子(===)

PHPでは速くなるとあったので、一応、検証してみた。 結論 PHPではできる限り、厳密等価演算子を使うべき。

等価演算子(==)と厳密等価演算子(===)

以下は間違っているのでこれを参照して下さい。高速化 - uupaaの開発日記で高速化について書いてあった。最初のfor文の長さの参照とインクリメントの話とループ展開は知っていたけど、厳密比較演算子も速くなるというのは初めて知った。演算子にそんなに違い…

(IE5で)最速セレクターを作ってみた

cssQueryが非常に遅いので作ってみた。まぁ、古いから仕方ない。 http://kquery.if.land.to/code/selector.html http://kquery.if.land.to/slickspeed/ 上のslickspeedは、広告が自動挿入されるサイトにおいてあるため、実行すると結果が狂う可能性がありま…

CSSセレクターの実装方針メモ

js

最近、携わったサイトを見るとIE9割とかざらで、IE5.5が現役というのもあった。一番ましでもIE7>IE6>>当分越えられない壁>>Fx3>Fx2>>Safari3>Opera9=IE5.5ぐらいで、やはり、IEで高速に動かないと話にならない。となると、XPath変換とかはありえない(ちなみ…

IEで高速なセレクターを作るアイディアがわいたけど、うまく動かない。

<html> <head> <script> if (document.createStyleSheet) { window.__getElementsBySelector = function (selector, elem) { if (elem) { elem.style.behavior = null; var cache = window.__getElementsBySelector.cache; cache[selector][cache[selector].length] = elem; } };</head></html>…

Prototype.jsでクラス指定するとき、二倍速くする方法

$$(".warning"); // ↓ $$("*.warning"); // なぜか二倍ぐらい速い セレクターの特徴を掴むためにベンチにかけているんだけど、色々やってもこうなる。正確なベンチやった人とか、Prototype.jsに詳しい人、教えて下さい。

IE5でencodeURIするために、replaceの第二引数に関数を持ってこれるようにした

http://kquery.if.land.to/code/js/patch.js ここにencodeURIはあったので、第二引数を持てるようなString#replaceを作った。まぁ、原案自体はここで取り上げられていたものだから、これでlastIndexが使えないことを考えて、ちょっとだけ動くようにしただけ…

スタイル読み取り用の関数を作った

動作確認用 jQueryと違うのはgetComputedStyleとcurrentStyleの分岐が関数の外側にあることぐらいです。さぁ、セレクターを本格的に作る前に、依存関係の無いスタティックな関数から作っていこうか。

Function.prototype.applyとかArray.prototype.spliceのIE5用のコード

applyはObject以外のものをthisにしようとする場合、x.__applyに代入できないので、constructorからprototypeを辿って、そこに入れる感じ。Array関連はcall等を一切使わず、forだけで処理するように作りました。あと、全体をfunctionで囲んだ無名関数の実行…

属性読み取り関数を作った

IE5だと、in演算子、replaceの第2引数に関数が取れないことがわかった。あと、IEはマジでgetAttributeとかがシンタックスシュガーなので、キャメルケース変換が必要なのこともわかった。 書いたコード

IE5(5.5ではない)のJScriptの連想配列ではまりがちな点

js

var obj = { 123: 'abc' }; とキーが文字列以外だとエラーを起こす。 var obj = { '123': 'abc', a123: 'abc' }; obj[123] = 'abc'; 上のように文字列であると明示するか、文字で始まる識別子なら、問題は起こらない。もしくは添え字配列で突っ込む。これな…

名前空間のケチり方

js

jQueryの現在のコードだと、 window.$ = function () { return new $.prototype.init(); }; $.prototype = { init: function () { // コンストラクタ } }; $.prototype.init.prototype = $.prototype; こういう風にやっている。僕はあまり好きじゃない。でき…

UserAgentを使わないブラウザ判定を作った

これ。例のIE5+も動くjQuery用。winieとmacieとunknownを追加した。昼間載せたバージョンはIE5だと動作しなかった。IE5ではObjectの添え字は文字列だけのようだ。switchを使った実装に変えて回避。チェックはあまり終わっていない。 チェックしたブラウザ Wi…

jQueryを再発明することになった

jQueryのプラグインは使えなくてもいい、つまり、セレクターによるDOM選択、あとはラッピングされた属性、CSS、イベント、ついでにアニメーションというと実質jQuery全部が使えるIE5.xに対応したライブラリって無いかな? 無いよね? ということで作ることに…