2010年12月20日月曜日

jQuery-ui dialogでのメモリリーク

日本語の情報が見つからなかったので、メモとして。
あまりこういうケースで使う人はいないのかなぁ?

jQuery1.4.2 jQuery-ui1.8.7でのお話。

jQuery-UIのdialogをmodalウィンドウで作成→消去→作成→消去と繰り返した場合、
IEではメモリが解放されず、がんがん食い潰していくという現象。

どうも、IEではCSSでAlpha(opacity=..)を指定した画像を読み込むと、
以後、それをDOM上から消去してもその分のメモリを解放してくれないとか。
で、それがmodalウィンドウを作成する時に、背景のグレーがもろに指定している、と。

使わなくなったら消去した方がいいだろうと思ってたのが裏目に。。。とほ。
なんか10Mずつぐらい増えていきましたよ。すごいね、これ。

回避策としては、jQuery-uiのCSSで下の、

.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); }

を、

.ui-widget-overlay { background: url(/appui/images/overlay.png) 50% 50% repeat-x; }

に変更することで回避できるみたいです。半透明ではなくなりますが。
その他にも半透明指定した画像を使用している場合はダメですけど。

それか、Link先では一度作ったウィンドウは使いまわすことで回避できると書いてある模様。

dialogをmodalで作らずに自前で半透明PNGを挿入するとか。

#5218 (memory leak problem on ie) – jQuery UI

2010年11月21日日曜日

javascript ブラウザの判定

どこかのサイト(たぶん@IT)にのってたブラウザ判定。
jQueryでやろうと思うと今はちょっとめんどうみたい。

var userAgent = window.navigator.userAgent.toLowerCase();
var appVersion = window.navigator.appVersion.toLowerCase();

if (userAgent.indexOf("msie") > -1) {
if (appVersion.indexOf("msie 6.0") > -1) {
alert("IE6");
}
else if (appVersion.indexOf("msie 7.0") > -1) {
alert("IE7");
}
else if (appVersion.indexOf("msie 8.0") > -1) {
alert("IE8");
}
else {
alert("Unknown");
}
}
else if (userAgent.indexOf("firefox") > -1) {
alert("Firefox");
}
else if (userAgent.indexOf("opera") > -1) {
alert("Opera");
}
else if (userAgent.indexOf("chrome") > -1) {
alert("Google Chrome");
}
else if (userAgent.indexOf("safari") > -1) {
alert("Safari");
}
else {
alert("Unknown");
}

2010年10月1日金曜日

guiceをstruts2で使うときのライブラリ

↓の2つをimportしないとダメ。どっかドキュメントに書いてたかなぁ?

guice-servlet-2.0.jar
guice-struts2-plugin-2.0.jar