hokacchaのはまろぐ

Jun 26 2011

node.jsで組み込みのメソッドを見る方法

例えばObjectのメソッドを確認したいときは

console.log( util.inspect({}.__proto__, true, null) );

でおk。

3 notes

Jun 10 2011

iPhoneのinput=”number”で表示がずれる件

なんかinput[type=”number”]のときに右に変なすきまができる。どうもPCのときに表示されるコントローラーの部分がでないんだけど幅だけは確保されてるんじゃないか的な疑い。

回避するにはこれでいける。 

input[type=”number”]::-webkit-outer-spin-button {
    display: none;
}

なんぞ。

1 note

Jun 02 2011

Android1.6ではhashchange使えない

ので、hashchangeプラグインいれるべし。

https://github.com/cowboy/jquery-hashchange

jquery mobileにもこれ入ってた。

Apr 27 2011

iPadで動画の再生と同時にフルスクリーンモードはできない?

iPadで、再生と同時にフルスクリーンモードにしたい。でもできないかも。

videoにwebkitEnterFullscreenっていうメソッドがあるんだけど、何かのボタンを押したときに、再生とフルスクリーンを同時にできないっぽい。

  1. フルスクリーン化できるのはvideoのloadedmetadataイベントが発火した後
  2. iPadは再生がはじまらないとloadedmetadataイベントが発火しない
  3. webkitEnterFullscreenメソッドはclickイベントなどのユーザー任意のアクション以外で実行できない(たぶん)

1、2の理由から

video.addEventListener(‘loadedmetadata’, function() { video.webkitEnterFullscreen() });
$(‘.btn’).click(function() { video.play(); });

ってやらないとダメなんだけど、3の理由からloadedmetadataイベントの実行はclickイベント内で実行されたことにならずにエラーになる。

ツンダかも。

再生中(loadedmetadata発火後)にフルスクリーンモードにするのは簡単で。これでOK。

$(‘.btn’).click({
  video.webkitEnterFullscreen();
});

仕様はこの辺。

http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/ControllingMediaWithJavaScript/ControllingMediaWithJavaScript.html

1 note

Mar 21 2011

ブラウザごとのDateがパースできる文字列の違い

なんかChromeでは動くけどiOSでDateがinvalid Dateとかになってたのでなんぞと思ってしらべたら結構ブラウザごとにパースできるのが違うみたい。Safariは結構厳しい。

以下に詳しくのってた。

http://d.hatena.ne.jp/naoyes/20101107/1289105967

動作チェック用。

http://dl.dropbox.com/u/336104/demo/ios_date/index.html

+

JSのtimestampはミリ秒

今から3日後とかを算出するときに

Date.now() + 3 * 24 * 60 * 60

とかしててなんか合わないと思ってしばらくはまった。

Date.now() + 3 * 24 * 60 * 60 * 1000

が正しいです。なんかPerlとかPHP書いてたときの癖で秒と思い込んでた。

Mar 14 2011

mod_rewriteでiPhoneとAndroid2.1以下の判別

はまったというかメモ。mod_rewriteとかひさしぶりに書いたよ。

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|Android)
RewriteCond %{HTTP_USER_AGENT} !iPad
RewriteCond %{HTTP_USER_AGENT} !Android\s(1.|2.[01][^\d])
RewriteCond %{QUERY_STRING}    !mode=pc
RewriteRule ^pc$ sumaho

ってなかんじ。?mode=pcとかつけとくとPCモード。なんかiPadのUAに一部iPhoneという文字列が入ってるのがあるらしいので一応iPadを除いとく。

+

iPadのUserAgent

iPadのUserAgentにiPhoneという文字列が含まれるとか含まれないとかで調べたけどよくわからんかった。3.2系のバージョンであるとかないとか。よくわからん。

jsで判別するときはnavigator.platformも見る方がよさげ。senchaとかそうしてるらしい。

Mar 07 2011

iOS4.1のvideo再生できない問題ではまった

なんか色々条件が複合するとiOS4.1で再生できない。具体的には

  • JSでvideo要素とsource要素をつくる
  • video.load()をよぶ
  • videoをappendChildでDOMに追加する

という条件が重なると再生できなかった。こんか感じのソースだとダメ。

var video = document.createElement(“video”);
var source = document.createElement(“source”);
source.setAttribute(“src”, src);
video.appendChild(source);
video.load();
document.getElementById(“container”).appendChild(video);

これでload()を呼ばないと再生できるけどたまに失敗するというまた謎現象になる。失敗しないようにするには、sourceじゃなくてvideo要素のsrc属性にするか、appendChildじゃなくてinnerHTMLでDOMに追加するといいみたい。デモ作った。
http://dl.dropbox.com/u/336104/demo/ios4.1_video/index.html

Mar 03 2011

canvasのdrawImageは外部ドメインの画像を書き出せない

画像をcanvasでdataURIにしようと思って以下のように書いてみた。

function img2base64(img) {
    var canvas = document.createElement(‘canvas’);
    var ctx = canvas.getContext(‘2d’);
    ctx.drawImage(img, 0, 0);
    return canvas.toDataURL();

同一ドメインの画像だといけるけど外部ドメインの画像でやろうとするとエラった。

Error: SECURITY_ERR: DOM Exception 18

仕様らしい

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#security-with-canvas-elements

ちっ

追記:

phonegapからだったらいけた

Page 1 of 3