ホーム > タグ > めも

めも

【iPhone】iOS5で追加になったもろもろ

ここ見ながらまとめてる http://jsdo.it/GeckoTang/8ldM

  • position: fixed;の実装
  • overflow: scroll/auto;に対応が1本指でスクロールするようになった
    • -webkit-overflow-scrolling: touch;を指定するとスクロールバーを出せる(ネイティブなスクロールになる)
    • バーが出てた方が動きが滑らか

position:fixed;な要素と-webkit-overflow-scrollinを指定している要素が重なった時、z-indexを指定していないとおかしな挙動をする。 z-indexが指定してあれば問題ない模様。

あとは日時に関する入力タイプ(<input type=”datetime”>など)でドラムが出るようになった。

  • date
  • month
  • time
  • datetime

などなど。 valueに値が無いと空っぽ表示→クリックすると現在時刻。

<input type=”range”>がスライダー表示になった。 -webkit-appearance: slider-vertical;で縦スライダー。 ::-webkit-slider-thumbで動かすアレのスタイル指定。

あとはプライベートブラウジングのときのこれ iOS5で追加されるPrivate BrowsingモードとWebStorageの兼ね合い ::ハブろぐ はやっぱりそうなっていた。 try~catchで回避可能。

【iPhone】Audioを読み込むイベントがどこまで持ちまわせるか

タイトルがイミフだけどとりあえずメモ。

iPhoneでAudioを読み込み(再生)させるには、 ユーザーによる任意のイベントが必要。

で、この「任意のイベント」がどこまで持ちまわせるか。 どこまでも持っていけるものではないみたい。

var audio = new Audio('hoge.mp3');
$('a.hoge').click(function(){
  audio.play();
});
これは大丈夫。

getJSON のコールバックでplay()

$('a.hoge').click(function(){
  $.getJSON('getjson.php', function(json){
    var audio = new Audio(json.audio_name);
    audio.play();
  });
});
これはたぶんダメ。

getJSONしてきたものをコールバックの外の変数に入れて、setTimeoutでJSONがセットされるのを確認してからplay()

$('a.hoge').click(function(){
  var json;
  $.getJSON('getjson.php', function(data){
     json = data;
  });</p>

<p>setTimeout(function(){
    if(typeof json === 'undefined') setTimeout(arguments.callee, 100);
    else{
      var audio = new Audio(json.audio_name);
      audio.play();
    }
  });
});
これもたぶんダメ。

同期通信でJSON取りに行って、play()

$('a.hoge').click(function(){
  var jsonText = $.ajax({url:'getjson.php',async:false});
  var json = JSON.parse(jsonText.responseText);</p>

<p>var audio = new Audio(json.audio_name);
  audio.play();
});
これもたぶんダメ。

試しに無名関数で囲ってみる

$('a.hoge').click(function(){
  var audio;
  (function(){
    audio = new Audio('hoge.mp3');
    audio.play();
  })();</p>

<p>});
ダメっぽい。

「任意のイベント」(ここではclick)のイベントハンドラのスコープの中で、 且つそのイベント発生後、通信が起こっていない状況じゃないと、 load/play()は出来ないような、そんな気がする。

詳細は時間があるときに検証する。

【JS】AndroidのAudio周りのメモ

■追記 2011/6/21 17:52 ————————————————————————— 色々調べてみた結果、どうもAndroidの場合、Audioの対応状況は、 OSのバージョン如何の問題ではなく、端末によって対応状況がまちまちな模様。。

Android端末のHTML5対応状況について調べてみた | Septeni Engineers’ Blog 上記のサイトで検証してる端末が、デフォルトで搭載されてるバージョンで検証したのか、 アップデートして検証したのかがわからないので、憶測の域を過ぎないまでも、 端末によるばらつきは事実と見ていいような気がする。 (OSのバージョンとブラウザのバージョンが紐付いてるわけではない?)

とりあえずAndroidで音声再生をしたい場合は諦めてFlashにしてしまうのが良さそう(仕事でやるなら)

今度はAndroid編。 (iPhone編はこっち)

とりあえずAudio周りに限らずそこに至るまでに調べたこととか。

Continue reading

【PHP】’ImagickException’ with message ‘No IDATs written into file

今まで見たこと無いエラーが出てきたので。

うーうーうなってたらげこさんが調べてくれました。

http://rubyforge.org/forum/forum.php?max_rows=100&style=nested&offset=2021&forum_id=33

By: Tim Hunter RE: Writing an image to STDOUT [ 返信 ] 2005-11-18 13:18 A follow-up: I checked this out last night. It turns out that to_blob works with 0×0 GIF and MIFF images, and raises a MagickException for a 0×0 PNG image. However, if you call to_blob with a 0×0 JPEG image then libjpeg will exit. I’ve added a check to to_blob for this case. With the test, if you call to_blob for a 0×0 JPEG image to_blob will raise a RunTimeError exception.

「0×0の画像を writtenImage() しようとするとエラーが出るよ!」 ってことらしいです。

実際のコードを見てみたら、 グローバルで定義した変数を、関数の中で使うときに、 global hoge; ってやってなかったので、値が全部 NULL になったのが原因のようでした。

エラーメッセージでググっても答えが見つからなかったのでタイトルにしてしまうのです。

【JS】iPhoneのAudio周りのメモ

自分用にメモ iOS4.0 と 4.2 の端末で色々検証

Continue reading

【JS】iOS4.1以下で、audioを制御できない【とみせかけて犯人はPHP】

■追記 2011/6/8 19:06 —————————————————————————- 解決しました。

実際の環境では、PHPでドキュメントルートの外からmp3のデータを引っ張ってきていたのですが、 そのコード上で、

header("Content-Type: audio/mpeg, audio/x-mpeg, audio/x-mpeg-3, audio/mpeg3");
と、Content-Type を複数指定していました。 ここを、 “audio/mpeg” のみに(こっそり)直したところ、無事iOS4.0の端末でも再生されるようになりました。 まさかPHPの方が原因だったとは・・・。

結論

iOS4.0(恐らくiOS4.1以下)では、複数の Content-Type には非対応、iOS4.2から(何故か)対応するようになった。

おまけ

ちなみに、 複数指定されていた Content-Type を、それぞれ一つずつ選んで渡してみたところ、次のような結果に。

iOS4.2 iOS4.0
audio/mpeg
audio/x-mpeg
audio/x-mpeg-3 ×
audio/mpeg3

とはいっても、例えば、 “audio/mpeg, audio/mpeg3″ のように指定しても、やっぱり鳴らなかったので、

複数指定はやっぱりダメなようです。

まだ検証中。 とりあえず検証してる内容をメモ。

何が起こったか

iOS4.1以下の端末(iPhone 3GS,iPhone4問わず)で、以下のスクリプトで音声再生ができない。 (実際に検証したのはiOS4.0の端末と、iOS4.2の端末)

var audio = new Audio('hoge.mp3');
$('#play').bind('touchend', function(){
    audio.play();
});

じゃぁなんでiOS4.1以下なの

Safari – Wikipedia iOS4.2 から Safari5 が搭載されるようになってる。怪しい。

HTMLMediaElement Class Reference | Safari Developer Library iOS4.1 まで使われていた autobuffer が廃止され、iOS4.2 からは preload というプロパティに変わっている。

この辺に原因があるのではと思い、この現象はiOS4.1以下で起こるものと推測する。

Continue reading

【JS】location.hrefによるXSS脆弱性

指摘を受けたのでメモ。

例えば http://example.com/ に以下のようなコードを書いたとする。

var url = location.href;
document.write('<a href="' + url + '">リロードするお!</a>');

この状態でアドレスバーに http://example.com/#’>”><script>alert(0)</script> と打ち込むと、 IE8以下及びIE9互換モードの場合、alertが実行されてしまう。

Continue reading

Thunderbirdが無限ダウンロードに陥ったら

Thunderbirdがサーバーに残ったメールを削除できずに メールのダウンロードを繰り返すようになったら、

[アカウント設定]→[サーバ設定] から 「ヘッダのみ取得する」 にチェックを入れる。

その後再度受信(「処理中です」と言われる場合はThunderbirdを再起動)すると、 メールのタイトルだけが受信されるようになる。

この状態だと本文を開かない限り、サーバーのメールを削除することは無いらしいので、 該当のメールを本文を開かずに削除。

その後「ヘッダのみ取得する」のチェックをはずして、本文をダウンロードしていく。

教えてくれたシステム担当の方に多謝!

【CSS】iPhoneのデバッグコンソールを開くとmedia属性のorientationが効かなくなる

iPhoneでコーディング中、 [設定]→[Safari]→[デベロッパ]→[デバッグコンソール]を”オン”にしていると、 下記のようなCSSの切り替えが効かなくなる。

<link rel="stylesheet" type="text/css" href="./css/iphone_portrait.css" media="only screen and (max-device-width:480px) and (orientation:portrait)">
<link rel="stylesheet" type="text/css" href="./css/iphone_landscape.css" media="only screen and (max-device-width:480px) and (orientation:landscape)">

原因は不明。 3GSでも4でも同様の現象が起こる。

とりあえず忘れないようにメモ。

【PHP】ディレクトリを削除しようとしたらはまった

ファイルを書き出すスクリプトを作ってる際、 既に書き出し用のフォルダが存在していたらそのディレクトリを削除する っていう関数を作ろうと思ったらまんまとはまったのでメモ。

まずはここを参考にディレクトリ削除の関数を作ってみる。

PHP:ディレクトリを削除する|STUDIO WING .lib

  function delDir($path){
    if($handle = opendir($path)){
      while($item = readdir($handle)){
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

とりあえずこれで特に問題なく動くかと思われたものの、 数字のみ(0~の連番)のディレクトリだけ何故か削除されない模様。 色々調べてるうちに下記のエントリに行き着いた。

ディレクトリ内のファイル一覧を取得する|Affirmative Way

正しくは以下のように取得してやる PHP: readdir – Manualより引用 警告 この関数は論理値 FALSE を返す可能性がありますが、FALSE として評価される 0 や “” といった値を返す可能性もあります。詳細については 論理値のセクションを参照してください。この関数の返り値を調べるには ===演算子 を使用してください。

ということなので下記のように書き換え。

  function delDir($path){
    if($handle = opendir($path)){
      while(false !== ($item = readdir($handle))){ //!== ってしないとディレクトリ名が"false"になることもある
        if($item != '.' && $item != '..'){
          if(is_dir("$path/$item")){
            delDir("$path/$item"); //再帰
          }else{
            unlink("$path/$item");
            echo "...";
          }
        }
      }
      echo "<br/>";
    }
    closedir($handle);
    rmdir($path);
  }

これで無事削除完了。 文字列 ”0” も “==” だと false なのよね。。

というわけで2011年初エントリ。

Home > Tags > めも

Search
Feeds
Meta

Return to page top