2008年11月アーカイブ

re: drawWindowできなかった。。。

| | コメント(0) | トラックバック(0)
Extensionにしたらできた。

セキュリティの問題か。。。

FFって:fileの中身空にできないのか

| | コメント(0) | トラックバック(0)
一回ファイル選択するともうキャンセルできないっぽい。

前はできた気がするけど。。。

あと、値の設定はできないけど、$(':file').val('')で設定値を空にするのはできた。

drawWindowできなかった。。。

| | コメント(0) | トラックバック(0)
GMでこんなの書いたけど、drawWindow前で止まってる。
JSだけで画面キャプチャできると思ったんだけど。。。

// ==UserScript==
// @name           test
// @namespace      http://0-9.sakura.ne.jp/
// ==/UserScript==

(function () {

var canvas = document.createElement('canvas');
canvas.setAttribute("id", "svcanvas");
canvas.style.display = "inline";
canvas.width = document.width;
canvas.height = document.height;

var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, document.width, document.height);
ctx.save();
ctx.scale(1.0, 1.0);

var x1 = document.left + window.pageXOffset;
var x2 = document.left + document.width + window.pageXOffset;
var y1 = document.top + window.pageYOffset;
var y2 = document.top + document.height + window.pageYOffset;

ctx.drawWindow(window.content, x1, y1, x2, y2, "rgb(255,255,255)");
ctx.restore();

alert(canvas.toDataURL());

})();

arguments -> Array

| | コメント(0) | トラックバック(0)
var args = Array.prototype.slice.call(arguments);

やっぱちゃんとMDC読まないとだめだなー

宗達行ってきた

| | コメント(0) | トラックバック(0)
なるほど高級店。マダムばっかり。まるで自由が丘。

味はなかなか。雰囲気良好。値段もそこまで高くないし結構いいかも。

http://www.soutatu.co.jp/

人は己が愚かであった過去に対価を払いたがる

| | コメント(0) | トラックバック(0)
確率的発想法から

もう単機能レンジは売ってないらしい

| | コメント(0) | トラックバック(0)
全部オーブンレンジになったとか。

オーブンいらないんだけどなぁ。。。

ロッキー チャックは~山~ねずみ~アマゾンは~とかげ~

| | コメント(0) | トラックバック(0)
レディーリンクス

映画「ミラーズ」オフィシャルブログパーツ

| | コメント(0) | トラックバック(0)
映画「ミラーズ」オフィシャルブログパーツ

企画としては面白いけど、APIは結構ざる。
(ただ、JSはちゃんと名前空間区切ってかかれてた)
裏でIE動かして、キャプチャ画像を反転して表示してる。

t.substring is not a function

| | コメント(0) | トラックバック(0)
jQueryで.filterとかに空のjQuery集合(.length==0見たいなの)を入れるとエラー

空集合に対しての操作は想定されてるけど、空の集合を引数にすると問題になるっぽい。

前世魔人の正体見たり 外道照身 霊破光線

| | コメント(0) | トラックバック(0)
レディーリンクス

jQueryでその要素が表示されているかどうかを調べる

| | コメント(0) | トラックバック(0)
$('div').filter(':not(:hidden)').length

これしかないのかなぁ。。。
「$('div').hidden?」って書きたいなぁ。。。

submitのajax化

| | コメント(0) | トラックバック(0)
$('form').submit(function (e) { e.preventDefault();
    var $_ = $(this);
    $.getJSON($_.attr('action'), $_.find(':input').serialize(), function (json) {});
});

横取りする。(ちゃんとするなら$.ajax()でやる)

phperの常識

| | コメント(0) | トラックバック(0)
$ cat .htaccess
php_value include_path .:/home/hoge/huga/app/vendors/pear/PEAR

今日教えてもらった。

地に足をつけていなければ、人は空も飛べる

| | コメント(0) | トラックバック(0)
どっかの書評から

空の正規表現

| | コメント(0) | トラックバック(0)
>>> 'aaaaa'.split(//)
SyntaxError: syntax error

>>> 'aaaaa'.split(new RegExp())
a,a,a,a,a

perlが「//」をコメントとして認めない理由?

dom操作でメモリリーク

| | コメント(0) | トラックバック(0)
ul.append(ul.find('li:first').remove());

liをくるくる回したかったけど、しばらくほっとくと「スクリプトが反応ないです」エラー(FF3)

ul.append(ul.find('li:first').remove().clone());

で、cloneして解決?

諦念は絶望から身を守る知恵である

| | コメント(0) | トラックバック(0)

もっとさらにtextとか、windowを揺らす

| | コメント(0) | トラックバック(0)
最終形?
mozzilaで折り返してるリンクテキストが飛ぶ症状があったので修正。
結局無理やりスペース突っ込んで修正。
文字間調整してるので見た目はそんなに変じゃないけど、Ctrl+Fとかの検索は効かなくなる。

new function () {
    var css = 'position: relative;';
    if ($.browser.mozilla) css += 'letter-spacing:-2px;';
    $('head').append([
        '<style type="text/css">',
            '.brbr { '+css+' }',
        '</style>'
    ].join(''));
};
$(function () {
    var pos = [3, -3, 3, -3, 3, -3];
    var a = document.getElementById('menu').getElementsByTagName('a');
    var len = a.length;
    $('#menu a').mouseover(function () {
        var ps = pos.concat();
        var val = setInterval(function () {
            var p = ps.shift();
            if (p) return document.body.style.marginTop = p+'px';
            clearInterval(val);
            document.body.style.marginTop = '';
        }, 10);
    });
    var match = $.browser.safari ? ['(.)(.)?', '$1$2'] : ['(.)', '$1'];
    match[0] = new RegExp(match[0], 'g');
    match[1] = $.browser.mozilla ? ' <span class="brbr"> '+match[1]+' </span> ' : '<span class="brbr">'+match[1]+'</span>';
    $('a:not(:hidden)')
        .each(function () {
            var child = this.childNodes;
            var length = child.length;
            for (var i = 0; i < length; ++i) {
                var self = child[i];
                if (self.nodeType != 3 && (!self.nodeValue || self.nodeValue.match(/^\s*$/))) continue;
                self.parentNode.innerHTML = self.nodeValue.replace(match[0], match[1]);
            };
        })
        .hover(function () {
            if ($.data(this, 'brbr')) return;
            $.data(this, 'brbr', true);
            var ps = pos.concat();
            var $_ = $(this);
            var val = setInterval(function () {
                var p = ps.shift();
                if (!p) {
                    $_.find('.brbr').css('top', '');
                    return clearInterval(val);
                };
                $_.find('.brbr').each(function (i) {
                    $(this).css({top:((i + ps.length) % 2) ? -3 : 3})
                });
            }, 25);
        }, function () {
            $.data(this, 'brbr', false);
        });
    ;
});

jsでcssのa:hoverってどうやって書き換えるんだろう。。。

| | コメント(0) | トラックバック(0)
かなりなぞ。

$('a').css('hover', '')とか、$('a').css(':hover', '')とか、$('a').css('a:hover', '')とかしたけどだめだった。
(onmouse中に取得することはできる)

さらにtextとか、windowを揺らす

| | コメント(0) | トラックバック(0)
さっきのやつはwindowを最大化してると解除されちゃうので修正。
さらにsafariはa tag内で改行されなくなっちゃうので2文字ごと切るように修正。
(spanの切れ目で改行してくれないっぽい)

$(function () {
    var pos = [3, -3, 3, -3, 3, -3];
    var a = document.getElementById('menu').getElementsByTagName('a');
    var len = a.length;
    $('#menu a').mouseover(function () {
        var ps = pos.concat();
        var val = setInterval(function () {
            var p = ps.shift();
            if (p) return document.body.style.marginTop = p+'px';
            clearInterval(val);
            document.body.style.marginTop = '';
        }, 10);
    });
    var match = $.browser.safari ? ['(.)(.)?', '$1$2'] : ['(.)', '$1'];
    match[0] = new RegExp(match[0], 'g');
    match[1] = '<span class="brbr" style="position:relative">'+match[1]+'</span>';
    $('a:not(:hidden)')
        .each(function () {
            var child = this.childNodes;
            var length = child.length;
            for (var i = 0; i < length; ++i) {
                var self = child[i];
                if (self.nodeType != 3 && (!self.nodeValue || self.nodeValue.match(/^\s*$/))) continue;
                self.parentNode.innerHTML = self.nodeValue.replace(match[0], match[1]);
            };
        })
        .hover(function () {
            if ($.data(this, 'brbr')) return;
            $.data(this, 'brbr', true);
            var ps = pos.concat();
            var $_ = $(this);
            var val = setInterval(function () {
                var p = ps.shift();
                if (!p) {
                    $_.find('.brbr').css('top', '');
                    return clearInterval(val);
                };
                $_.find('.brbr').each(function (i) {
                    $(this).css({top:((i + ps.length) % 2) ? -3 : 3})
                });
            }, 25);
        }, function () {
            $.data(this, 'brbr', false);
        });
    ;
});

textとか、windowを揺らす

| | コメント(0) | トラックバック(0)
テキスト置き換えはinnerHTML。ちゃんとinsertBeforeとかremoveChildとか使った方がいいのかな。。。

$(function () {
    var pos = [3, -3, 3, -3, 3, -3];
    var a = document.getElementById('menu').getElementsByTagName('a');
    var len = a.length;
    $('#menu a').mouseover(function () {
        var ps = pos.concat();
        var val = setInterval(function () {
            var p = ps.shift();
            p ? window.moveBy(0, p) : clearInterval(val);
        }, 10);
    });
    $('a:not(:hidden)')
        .each(function () {
            var child = this.childNodes;
            var length = child.length;
            for (var i = 0; i < length; ++i) {
                var self = child[i];
                if (self.nodeType != 3 && (!self.nodeValue || self.nodeValue.match(/^\s*$/))) continue;
                self.parentNode.innerHTML = self.nodeValue.replace(/(.)/g, '<span class="brbr" style="position:relative">$1</span>');
            };
        })
        .mouseover(function () {
            var ps = pos.concat();
            var $_ = $(this);
            var val = setInterval(function () {
                var p = ps.shift();
                if (!p) {
                    $_.find('.brbr').css('top', '');
                    return clearInterval(val);
                };
                $_.find('.brbr').each(function () {
                    $(this).css({top:(Math.random() - 0.5) * 10})
                });
            }, 10);
        });
    ;
});

もういっこ。ぼつったけどリンク自体を揺らせるバージョン。

    $('a:not(:hidden)')
        .hover(function () {
            if ($.data(this, 'brbr')) return;
            $.data(this, 'brbr', true);
            var ps = pos.concat();
            var $_ = $(this).css('position', 'relative');
            var val = setInterval(function () {
                var p = ps.shift();
                if (p) return $_.css('top', p);
                $_.css({'position':'','top':0});
                clearInterval(val);
            }, 10);
        }, function () {
            $.data(this, 'brbr', false);
        });
    ;

$().append('<iframe>').find('iframe:last').attr('name', 'hoge')はうまくいかない

| | コメント(0) | トラックバック(0)
:fileで画像選択時の自動アップローダー作ろうとしてiframe追加してたけど、jQueryで.attr('name', 'hoge')してもformのtargetにできない。
(FF,IEで確認。新しいwindowが開く)

結局$().append('<iframe name="hoge">')って書いたらいけた。
appendChildはだめだけど、innerHTMLはOKってことか。

safariってリロード時にいろいろ処理を省いてるみたい

| | コメント(0) | トラックバック(0)
$(function () {})の中でhtml elementの.offset().topを取ったらえらい大きな数値が帰ってきた。

setTimeout(function () {}, 500)内だと正しい数値が帰ってくる。

SWFObjectでscript.parentNodeはNullまたはオブジェクトではありません

| | コメント(0) | トラックバック(1)
圧縮版の場合「J.parentNodeはNullまたはオブジェクトではありません」

swfobjectを入れたblogpartsを二つ並列に張ったらおきた。

「function checkReadyState() {」内のscript.parentNode.removeChild(script);をif (script.parentNode) script.parentNode.removeChild(script);して改善。
(圧縮版の場合J.parentNode.removeChild(J);をif(J.parentNode)J.parentNode.removeChild(J);に)

ひとつだけ張ってると問題ないから複数貼り付け時の問題?

function () {}のあとには「;」を置こう

| | コメント(0) | トラックバック(0)
var hoge = function () {
//中でいろいろやる
}
(function () {
//中でいろいろやる
})();

この二つを組み合わせると

var hoge = function () {}(function () {})();

こう解釈されて、最後の「()」が多いって文句いわれる。

var hoge = function () {};(function () {})();

ならOK

人は慣れ親しんだものを善と思い、見慣れぬものを悪と思う

| | コメント(0) | トラックバック(0)
どっかの本から

jQuery UIのDraggablesがIE7で変な気がする

| | コメント(0) | トラックバック(0)
クリックすると消える。

本家のdemoだと大丈夫だからimgをdraggableにしたのが悪いのかな。

こっちのつかって解決。

input[type="file"]のDOMActivate event

| | コメント(0) | トラックバック(0)
FF -> ファイル選択直後に2回発生
IE7 -> 無視
safari -> 「ファイルを選択」ボタンを押した直後に発生。ファイル選択後は無視

FFはwindow.reload時に前回選択されたファイル名をそのまま保持するから、それを再アップロードするための対策がほしかったんだけど、FFだけDOMActivateと.changeで、それ以外は.changeだけを実装するのがいいかな。
FF以外はwindow.reload時に選択されたファイルクリアするし。

style="display: block ! important;"

| | コメント(0) | トラックバック(0)
<tag style="">で指定したものより、<style type="text/css">でimportant指定したものの方が優先される。
さらに優先するには<tag style="">の中でもimportantを指定する。

すごいたぶちさん on vista

| | コメント(0) | トラックバック(0)
stabchihwndmapのallocが何とかとかいう話でIE7が起動しなくなる。
(応答していません状態)

結構使えそうなソフトなのに。。。惜しい。

カスタムアイコンでbindInfoWindowHtml

| | コメント(0) | トラックバック(0)
b is undefined
[Break on this error] function cp(a){var b=a.infoWindowAnchor,...conAnchor;return new D(b.x-c.x,b.y-c.y)}
main.js (1008 行目)

とか言われる。

        GEvent.addListener(marker, 'click', function () {
            marker.openInfoWindowHtml('<p>aaaa</p>');
        });

普通にこうやってもだめ。

map.openInfoWindowHtml(marker.getLatLng(), '<p>aaaa</p>')

これはいける。
merkerのアイコン指定しなければOK

google map apiの呼び出し順

| | コメント(0) | トラックバック(0)
この順番で呼んだらへんなとこが中心で表示された。
-----------
        map.panTo(bounds.getCenter());
        map.setZoom(map.getBoundsZoomLevel(bounds));
        mgr.addMarkers(markers, 0);
        mgr.refresh();
-----------
以下の順番で呼んだらうまくいった。
-----------
        map.setZoom(map.getBoundsZoomLevel(bounds));
        mgr.addMarkers(markers, 0);
        mgr.refresh();
        map.panTo(bounds.getCenter());
-----------

setZoomとpanToの順番の問題?

MarkerManagerってgooglemap apiに取り込まれてたのか

| | コメント(0) | トラックバック(0)
GMarkerManagerって名前で入ってる

でも、他のライブラリは取り込まれてない感じ。

Google Maps API リファレンスのGLatLngBoundsの説明がひどい

| | コメント(0) | トラックバック(0)
----------------
intersects(other)     Boolean     名前の示すとおりです。
containsBounds(other)     Boolean     名前の示すとおりです。
----------------

気持ちは分かるけど、それ言ったらレファレンスなんてほとんど不要だよ。

MarkerManagerのaddMarkersでrefreshしてもmarkerが表示されない場合の確認事項

| | コメント(0) | トラックバック(0)
mgr.addMarkers(markers, 0);

「0」必須。このくらい初期値として省略させてくれてもいいのに。。。

a is undefined main.js 290行目

| | コメント(0) | トラックバック(0)
a is undefined
[Break on this error] function Ji(a){var b;while(b=a.firstChild){Ii(b);a.removeChild(b)}}
main.js (290 行目)
http://maps.google.com/intl/ja_ALL/mapfiles/132e/maps2.api/main.js

new GMap2();こんな呼び方してたのが原因。google maps apiってエラーが分かりにくいんだよなぁ。。。
(JSのライブラリ全般に言えることだけど)

JSTweenerと、jQuery.animateのフレームレート

| | コメント(0) | トラックバック(0)
JSTweenerが60(setIntervalの値で言うと16.6)
jQuery.animateが77(setIntervalの値で言うと13)

JSTweenerはJSTweener.frameRate = 20とかで変更できる。
jQuery.animateは変更できない?(jQuery.custom内でハードコードされてるっぽい)

setInterval(function () {},13)はちょっと早すぎる気がするなぁ。。。

給料は貰う側の能力でなく支払う側の能力

| | コメント(0) | トラックバック(0)
講演会の話から

信頼とは約束と履行の繰り返し

| | コメント(0) | トラックバック(0)