node.jsで組み込みのメソッドを見る方法
例えばObjectのメソッドを確認したいときは
console.log( util.inspect({}.__proto__, true, null) );
でおk。
noise dept.
Game of Thrones Daily
RMH
art blog(derogatory)
AnasAbdin
TVSTRANGERTHINGS

No title available
Sade Olutola
dirt enthusiast

★

@theartofmadeline
One Nice Bug Per Day
Peter Solarz
almost home

blake kathryn
🪼
styofa doing anything
Aqua Utopia|海の底で記憶を紡ぐ
$LAYYYTER

titsay
seen from United States

seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
seen from United States
seen from United States

seen from United States
seen from United States
seen from United States

seen from United States
seen from United States
seen from United States
seen from T1
seen from Spain
seen from United States
seen from Netherlands
seen from Brazil

seen from United Kingdom
@hokaccha-blog
node.jsで組み込みのメソッドを見る方法
例えばObjectのメソッドを確認したいときは
console.log( util.inspect({}.__proto__, true, null) );
でおk。
iPhoneのinput="number"で表示がずれる件
なんかinput[type="number"]のときに右に変なすきまができる。どうもPCのときに表示されるコントローラーの部分がでないんだけど幅だけは確保されてるんじゃないか的な疑い。
回避するにはこれでいける。
input[type="number"]::-webkit-outer-spin-button { display: none; }
なんぞ。
Android1.6ではhashchange使えない
ので、hashchangeプラグインいれるべし。
https://github.com/cowboy/jquery-hashchange
jquery mobileにもこれ入ってた。
iPadで動画の再生と同時にフルスクリーンモードはできない?
iPadで、再生と同時にフルスクリーンモードにしたい。でもできないかも。
videoにwebkitEnterFullscreenっていうメソッドがあるんだけど、何かのボタンを押したときに、再生とフルスクリーンを同時にできないっぽい。
フルスクリーン化できるのはvideoのloadedmetadataイベントが発火した後
iPadは再生がはじまらないとloadedmetadataイベントが発火しない
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
ブラウザごとの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書いてたときの癖で秒と思い込んでた。
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とかそうしてるらしい。
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
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からだったらいけた
iOS Safariのalertとかconfirmのタイトルは変更できない
alertとか出すとメッセージの上にURLが表示されるけど、そこの部分は変更不可能みたい。PhoneGap使ってる場合はPhoneGapのnotification使えばいける。
navigator.notification.alert('alert message', function() {}, 'title');
confirmも同じようにいける。
JSDeferredのparallel
はまったというか使い方よくわかってなかった。
Deferred.parallel([ function() { var d = Deferred(); setTimeout(function() { console.log('foo'); d.call('foo'); }, 2000); return d; }, function() { var d = Deferred(); setTimeout(function() { console.log('bar'); d.call('bar'); }, 1000); return d; } ]).next(function(results) { console.log(results); // => ['foo', 'bar'] });
こんな感じかな。
iOSの証明書を登録するときchromeでできない
まじではまった。Certificatesから認証キーをアップするとき、chromeだとアップしても何もおきない。Safariだと普通にいけた。
iOSのアプリ申請はAgentじゃないとできない
僕のRoleはAdminだったのでDistributionのメニューがでてなかった。デベロッパーアカウントの登録者(Agent)じゃないとダメっぽい。
Titaniumのwebviewの幅と高さの指定
Titanium.createWebView({ width: 'auto', height: 'auto' })
ってしてたけどなんかうまくいかない
Titanium.createWebView({ width: '100%', height: '100%' })
だとうまくいった。
TitaniumでTitanium.APIがundefinedとかいわれる
あるはずのものがなくて
Titanium.API.debug('hoge')
とかしてるところのコードで
'Titanium.API' [undefined] is not an object.
とか言われることがあった。
そうなったら以下のファイルを一回全部消してリビルドすればいいっぽい。
build/iphone
iOS4.2でストリーミングな動画読み込むときcanplaythroughが何回も呼ばれる
4.1だと一回しかよばれない。4.2だと何回も呼ばれる。詳しくは調べてない。