新しいSafariについて予想する
追記 (2013-08-13): WWDCでの発表にて、いくつか予想が外れたのが分かったので、短い答え合わせのエントリを書いた。あわせてSafariに懸念していることも書いたので、それもどうぞ。
以下は元記事。
WWDCが近いので新しいSafariの予想をしようかと。
来週まで待って確定的な情報を書いてもよかったけど、まあいいや。
たぶん7月に出る
新しいバージョンが「Safari 7」になるのかわかんないから、Apple風に「新しいSafari」と書くね。
ここ2回のメジャーバージョン(5.1, 6.0)は、7月下旬にリリースされている。なので今回も、WWDCでお披露目+Developer Previewのリリース、7月の同時期に正式版リリースされると予想。
ここ1, 2ヶ月のWebKitでのAppleの動きを見ても、コードのリファクタリングや細かなバグ修正、あとChromeのBlink移行に乗じたコード削除がほとんどな印象がある。なので、リリース準備に入っているんじゃないかと。
あと、ブランチが5月22日に切られた。
safari-537.43-branchという、メジャーバージョンが537になってから、初のブランチ(なはず)。trunkからのマージも行われている。
過去のSafariのブランチも調べてみると、Safari 6.0の元になった536ブランチが切られたのは2012年5月7日、Safari 5.1の元になった534ブランチから派生している。これが2011年5月20日。2週間ばらついてるけど、5月中に行われている。
今回はマイナーバージョンも含めたブランチなので、過去2回とちょっと違うけど、でもこれが新しいSafariのベースになるんじゃないかなと。
なにが入る?
Changesetのメモやコンパイルタイムフラグから拾ってみる。Nightlyで試すのがよいのだろうけど、ちょっと時間かかりそうなので省略。間違ってたらごめんなさいよ。
新しい機能
<main>
- Page Visibility API
mouseenter
,mouseleave
イベントborder-image
のround
- CSS Level 3な
background-position
(オフセット指定) background
プロパティでのbackground-size
サポートContent-Security-Policy
ヘッダ追加- Speech Synthesis API
- DOM4のイベントコンストラクタいろいろ
Page VisibilityはChromeにはあったけど、これまでSafariでは有効にされていなかった。Changesetには[iOS]とあるけれど、デスクトップで使えないなんてことはないと思う。
ちょっと面倒なのが、Blinkではまだ接頭辞がとれてないけど、WebKitでは接頭辞が削除されてしまったこと。webkitHidden
で壊れるWebというのは想像できないけど、どうなんだろう。なんにせよBlinkがんばって。
background
でのbackground-size
サポートでは、background
にあったバグが修正されたので、background-size
の後にbackground
書いてたら問題が出るかと思う。あったら修正しよう(background-size
を後に書こう)。
あと、WebGLも有効になるんじゃないかと思っている。IE11で対応しそうなこのご時世にSafariは対応しないとかね、ないと思うんですよ。Google MapsだってWebGLベースになるのに…あっMapsだからもしかして…いやいや。iOSやWebViewはわかんないけど、デスクトップでは使えるようになるのではないか。
Speech Synthesis APIは何するつもりなんだろう。接頭辞もない。APIは固まってるのかな。
接頭辞つきの新機能(独自拡張、試験実装)
- Flexbox (CR版)
- CSS Masking
-webkit-cursor-visibility: auto-hide
追加- CSS
-webkit-fit-content
value
Flexboxはつつくとバグがぼろぼろ出てきそうな気がする(特に他の機能と組み合わせると)。Flexbox, 今年中には本格的に使えるかなと思ったけど、そこまでな感じがしなくなったのが残念。OperaのChromium移行で実装がたぶん後退したこと、Firefoxではmultiline Flexboxほかいくつかの機能が未実装ので、接頭辞無しでフルに使えるブラウザは後発のIE11だけになるんじゃないかというこの面白さ。
-webkit-cursor-visibility: auto-hide
はビデオとか、フルスクリーン時にマウスカーソル消したい場合に使うらしい。簡単に試したけど、フルスクリーン時しか動作しない感じ。そりゃそうか。
-webkit-fit-content
は「要素内容に依存する幅の指定について」で説明されてるのでそちらをどうぞ。仕様はcss-boxよりもcss-sizingを見たほうがいいかも。
接頭辞がとれた機能(接頭辞つきのも引き続きサポート)
Gradients, Transitions, calc()
が接頭辞なしで使えるのは大きい。グラデーションは、これまでさんざん言ってきたけど、構文が変わったので気をつけたい。
あとはTransforms, Animationsか…大掛かりそうだけれど、来年までにはなんとかしてほしいなあ。
接頭辞つき実装が削除された機能
- Page Visibility API
webkitPostMessage
Blob.webkitSlice()
-apple-
,-khtml-
なプロパティ(長い説明はこちら)
先々月のWebKit Contributors Meetingで、機能の削除とか接頭辞まわりのスロットがあって、そこで接頭辞は可能な限り削除していく大方針が決まったみたい。大きく進展する気はしないけど、去年くらいからぽつぽつと成果が出ているのはよいこと。
バグ修正で気になったものなど
- デスクトップでの
-webkit-text-size-adjust
を削除 - メディアクエリーがズームした値で変わるように
- CSS Transitions, CSS Animationsが
::before
,::after
に効かない問題の修正 - ズーム時に画像の
offsetWidth
,offsetHeight
が間違ってたのを修正 - 画像とかに
border-radius
かけたら四方がはみ出るのを修正 background-clip: margin-box
以外でのボックスとborder-radius
の問題を修正- セレクタのspecificityの壁が超えられないように
- class属性をいじっても
classList
に反映されなかったバグの修正 - 画像の代替テキストがコピーされなかった問題が修正
-webkit-text-size-adjust
がデスクトップで無効になったので、ズームしてもフォントサイズが変わらないとかがなくなったはず。メディアクエリーのやつは、em-based queryでRWDなサイト作ってるとき問題になってたやつ。
border-radius
絡みはようやくか、という感じ。classList
と画像のオフセットのやつはバグの存在を初めて知った。
入らない(だろう)機能
コンパイルタイムフラグのファイルより、入らなそうな機能の一部を。
- Web Components
- Performance系API(*** Timings, High Resolution Time)
- Scoped Stylesheets
- CSS Exclusions, Shaders, Compositing
<iframe seamless>
- Shared Workers
- CSS Device Adaptations
- CSS
resolution
media feature - IndexedDB
いろいろない。無理ないなって機能もあるけど、Scoped Stylesheetsは入れて欲しかった……
High Resolution Timeは一度入ったんだけど、performance.now()
だけの判定で他のPerf系APIが使えると想定してるコードがあったようでrevertされてしまった。Timing系を入れるって選択肢はないらしい。ちぇっ。
High Resolution Time入らなかったらrequestAnimationFrame()
のコールバックが取る引数ってどうなるんだろう。
残念な部分や細かな疑問は尽きないけれど、どのブラウザにもこれ入ってほしいなあというのはあるし、そんなものだよね。あとAppleが保証できない・するつもりもない機能をSafariに入れてしまうのは、それはそれで問題だろう。いまだって、中途半端な実装に泣かされていたりもするんだから。とくにWebKitみたくいろんなベンダーが関わるプロジェクトだと、そういう状況になりやすいだろうから、機能は減っても、安定するまでは使えないようにしとくのはよいかなと思う。
政治的に入ってない機能については、Webサイト・Webアプリ側で無理やり使っていって依存させ、実装せざるを得ない状況にもっていくしかないんだろうか。