JavaScript で Safari 1.3 除け

※ Safari と書く際にバージョン番号を抜いちゃう人は IE 5, 5.5, 6 が混在していた時期や Netscape 4 と 6 が混在していた時期のいやらしさ、あるいは WinIE と MacIE の信じられない挙動の違いなどを知らない幸せな人か、または忘れちゃった幸せな人に違いないと自分は思っている。省略するな! 全然ベツモノなんだよ! お前は IE 6 と 7 の違いも無視すんのか!?

えー今回は Safari 1.3 のお話。

JavaScript を書く際に window.onload にあれこれ処理をつけていくのはよくある話だと思うのですが、この onload event、中を覗いてみたことありますか?

いやね、あたしゃ知らなかったんですよ。

Safari 1.3 と WinIE1 では onload event の中に event の発生した target(IE では srcElement)が存在しない

んです。な、なんだってー。

じゃあお前どこでそのイベント拾ってきやがったんだ。言ってみろコノヤロー。子どものお使いじゃねーんだぞ、ちゃんと報告しなさいよ、報告を。このアメ玉誰にもらったの? 知らない人? 知らない人から食べ物もらっちゃダメって言ってるでしょ!

えー。

コトの起こりは Safari 1.3 の event がイベントハンドラをセットしたオブジェクトとなんかちょっと違うオブジェクトを抱えて持ってくるという、お前はなんのコントだ状態の変なバグに遭遇したことでした2

悩んだ末、いっそ Safari 1.3 は無視しちまおうと思って3 event をあれこれ調べてるうちに onload event はもっとはっきり変だよ! やった! この段階で無視できるよ! と思って trap を設置したら隣で WinIE が引っかかったよorz

お前もか!

ってね。しょうがないんで target を持ってなくても WinIE 独自のプロパティを持ってたら ok を出すことにして解決とあいなりました。

( evt.target || evt.srcElement || evt.boundElements )

だったかな。なんかこんな感じです。確認したい人は適当に補完してやってみてください。と言っても Safari 1.3 が手元にないと確認できないので多くの人には意味のない情報ですけど。

ところで、WinIE はなぜ window.onload イベントで window.scroll が効かないのでしょうか。不思議ですね。ごきげんよう。

  1. 6, 7 で確認 

  2. イベントハンドラの書き方によっても挙動は違うのかもしれないけど、今回はそこまで深く追求していない。 

  3. 当然 JavaScript を切ってもユーザーは困らないようになってますよ。 

More

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 Develop Document Jekyll