2007-10-14

たださんによる iPod Touch レビューがありがたい

ただのにっき(2007-10-12)

実はネット端末として DS とどっちが上かに興味がある。ソフト的なテクノロジというよりは単純にいちばん気になるのは速度かな。DS おせぇ。

でも。えーとあの。クレードル? あれの操作性もなかなかよいと思うんだけど、その部分がどうなのかも気になるところか。誰か比較してる人いないかな…。

そうだ。イアホン部分を抜くと一時停止するっていうのは知らなかった。基本的にトランスミッタを使って車で聴くスタイル1なので、とっさに音を切りたけりゃ車のオーディオを切っちゃえばいいんで。

  1. しかも遠出のときだけ 

WEBrick メモ

WEBrick をあれこれ調べていてもたいした情報がなく、

こんくらいか。eto 方式が自分の好み。

proxy の話を除けばいちばん充実してるのはこっちかな?

Gnome's Guide to WEBrick

ところでどうでもいい話だけど、tokuhirom さんて今は全然モンキーレンチが似合うように見えないよね。何があったのだろう。もしや別人?

event handling って難しい

JavaScriptのイベントハンドラに頭を悩ます。。

を見てさらに突っ込んでみた。ここでは便宜的にイベントハンドリングには以下の3つの方法があるものとする。

  1. HTML attribute
    • <a> とか
  2. DOM event listener
    • obj.addEventListener(), obj.attachEvent()
  3. DOM 0 property
    • obj.onlick = func とか

これを上の優先順位で付加した。実際には DOM 0 property は try catch で event listener のセットに失敗したときだけ試すことにした。

結果、意外なことが分かった。

手元の環境では

  • DOM event が優先
    • Gecko ブラウザのみ
  • HTML attribute が優先
    • WinIE 6, Opera 9.23, Safari 1.3, iCab 3.03

合わせ技で、HTML attribute と DOM event listener の両方で return false した場合、

  1. HTML attribute
  2. DOM event listener
  3. 停止
    • WinIE は DOM event listener の return false で停止
    • Safari 1.3, Opera 9.23, iCab 3.03 は HTML attribute の return false で停止(つまり event listener だけで return false しても止まらないでページ遷移してしまう。)

という流れになる。

ちなみに Firefox で同じことをすると DOM event listener が先に実行されて、その return false で停止する。

ただなんか Safari はよく分からなくて、手元の Safari 1.3 では

  • a タグは DOM event listener が優先
  • form タグは HTML attribute が優先

てな動きに。なんだかよく分からん。本当に一貫してこの通りの動きになるのかは分かりません。

ちなみに、どのブラウザでも DOM 0 property にセットしたものは HTML attribute を上書きする形で動くらしく、この中での return false によってページ遷移を抑止することができた。逆に言うと、onsubmit で submit の無効化とかしたい場合は、現状では DOM event listener は役に立たず、DOM 0 property の方にセットしないとダメっぽいです。 DOM 0 property の方にセットして false を返すか、DOM event listener にセットして event オブジェクトを通じて動作の停止を行うかのいずれか。

複数のイベントハンドラをセットする必要が今のところ自分にはないのでこれ以上細かくは調べてないけど、ページ遷移抑止をしつつ複数のイベントハンドラを a や form で動かそうと思ったら、どうするのが正解なんでしょうな event オブジェクトをちゃんと使えってことですな。

[2007-09-15 追記]

分かりました。以下、「イベントハンドラ」は DOM event listener の意味で用います。

  • イベントハンドラの return を見てくれるのは IE だけ
  • イベントハンドラからページ遷移を抑止するためには event オブジェクトに対してそのように指示を出さないとダメ
    • 明示の方法は event モデルに従う
  • イベントハンドラは黙ってても「イベントオブジェクト」を受け取る
    • 仕様になってるわけじゃないけど、そういう実装になってる
  • attachEvent() で動作する IE, Opera, iCab は window.event オブジェクトをいきなり参照できる
  • addEventListener() で動作する Firefox, Safari は明示的にイベントハンドラの方で引数を指定しておいて event オブジェクトを受け取る
    • かと思いきや Safari はなぜかイベントハンドラ function で引数を明示しておかなくても `event' リテラルが「W3C モデルの event オブジェクト」を意味してまともに動いちゃう
    • しかも addEventListener() で第3引数を省いても動くなどいい具合にアバウト

すっげ。Safari すっげ。どういうことかというと、こんなんでも動くってことです。

obj.addEventListener( 'click', function() {
  alert( event.target );
} );

Firefox だと event なんてオブジェクトは function() 内に存在しないので動きません。ふーむ。

登場人物は Opera 9.23, iCab 3.03, Safari 1.3(一部2), Firefox 2.0.7, WinIE 6 とワタクシ wtnabe、special thanks to odz ! でお送りしました。

About

例によって個人のなんちゃらです

Recent Posts

Categories

Tool 日々 Web Biz Net Apple MS ことば News Unix howto Food PHP Movie Edu Community Book Security Text TV Perl Ruby Music Pdoc 生き方 RDoc ViewCVS CVS Rsync Disk Mail FreeBSD Cygwin PDF Photo Zebedee Debian OSX Comic Cron Sysadmin Font Analog iCal Sunbird DNS Linux Wiki Emacs Thunderbird Sitecopy Terminal Drawing tDiary AppleScript Life Money Omni PukiWiki Xen XREA Zsh Screen CASL Firefox Fink zsh haXe Ecmascript PATH_INFO SQLite PEAR Lighttpd FastCGI Subversion au prototype.js jsUnit Apache Trac Template Java Rhino Mochikit Feed Bloglines CSS del.icio.us SBS qwikWeb gettext Ajax JSDoc Rails HTML CHM EPWING NDTP EB IE CLI ck ThinkPad Toy WSH RFC readline rlwrap ImageMagick epeg Frenzy sysprep Ubuntu MeCab DTP ERD DBMS eclipse Eclipse Awk RD Diigo XAMPP RubyGems PHPDoc iCab DOM YAML Camino Geekmonkey w3m Scheme Gauche Lisp JSAN Google VMware DSL SLAX Safari Markdown Textile IRC Jabber Fastladder MacPorts LLSpirit CPAN Mozilla Twitter OpenFL Rswatch ITS NTP GUI Pragger Yapra XML Mobile Git Study JSON VirtualBox Samba Pear Growl Mercurial Rack Capistrano Rake Win RSS Mechanize Sitemaps Android JavaScript Python RTM OOo iPod Yahoo Unicode Github iTunes God SBM friendfeed Friendfeed HokuUn Sinatra TDD Test Project Evernote iPad Geohash Location Map Search Simplenote Image WebKit RSpec Phone CSV WiMAX USB Chrome RubyKaigi RubyKaigi2011 Space CoffeeScript Nokogiri Hpricot Rubygems jQuery Node GTD CI UX Design VCS Kanazawa.rb Kindle Amazon Agile Vagrant Chef Windows Composer Dotenv PaaS Itamae SaaS Docker Swagger Grape WebAPI Microservices OmniAuth HTTP 分析基盤 CDN Terraform IaaS HCL Webpack Vue.js BigQuery Middleman CMS AWS PNG Laravel Selenium OAuth OpenAPI GitHub UML GCP TypeScript SQL Hanami Document SVG AsciiDoc Pandoc DocBook Develop Jekyll macOS Node.js Vite Heroku Transformer AI Data Cloud Wasm