プログラム: 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)
映画「ミラーズ」オフィシャルブログパーツ

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

t.substring is not a function

| | コメント(0) | トラックバック(0)
jQueryで.filterとかに空のjQuery集合(.length==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)
>>> '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して解決?

もっとさらに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

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)はちょっと早すぎる気がするなぁ。。。

このアーカイブについて

このページには、2008年11月以降に書かれたブログ記事のうちプログラムカテゴリに属しているものが含まれています。

前のアーカイブはプログラム: 2008年10月です。

次のアーカイブはプログラム: 2008年12月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.1