Mobile Safari、フルスクリーンモード、UIWebView、どれからのアクセスか判別する

apple-mobile-web-app-capableというめmetaタグの値をyesにするとiOS Safariでそのページを「ホーム画面に追加」し、ホーム画面からアクセスした際にページをフルスクリーンモードで開くことができる。

<meta name="apple-mobile-web-app-capable" content="yes" />

出典:Safari HTML Reference – Supported Meta Tags

フルスクリーンモードで開いた場合、navigator.userAgentの値に「Safari」の文字列が現れなくなる。

Moble SafariでのuserAgent(iOS 5.1.1):

userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3 

フルスクリーンモードでのuserAgent(iOS 5.1.1):

userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 

ところで、FacebookアプリやTwitterアプリなど、投稿内容のURLを踏むと、そのアプリの中でWebページが展開されるものがある。UIWebViewというやつ。この場合のuserAgentにも、やはり「Safari」の文字列は現れない。

FacebookアプリのuserAgent(iOS 5.1.1):

userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 [FBAN/FBIOS;FBAV/5.1;FBBV/68414;FBDV/iPhone4,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/5.1.1;FBSS/2; FBCR/KDDI;FBID/phone;FBLC/ja_JP] 

TwitterアプリのuserAgent(iOS 5.1.1):

userAgent: Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9B206 

というわけでSafariという文字列があるかないかを頼りに、フルスクリーンモード、ないしはUIWebViewからのアクセスを判別しようとすると失敗する。 しかし上記出典のSafari HTML Referenceによると、フルスクリーンモードではwindow.navigator.standaloneというプロパティがtrueになるらしいので試した。

デモ

iPhone/iPadのどちらでも、フルスクリーンモードのみでwindow.navigator.standalonetrueになるのを確認できた。

userAgent文字列からiPhone/iPadであることを判定した上で、

  • userAgentにSafariの文字列あり → Mobile Safari
  • userAgentにSafariの文字列なし、かつwindow.navigator.standalone === true → フルスクリーンモード
  • userAgentにSafariの文字列なし、かつwindow.navigator.standalone === false → UIWebView

という判定をすることができる。

必要な情報収集って何だろう?

昨日、今日と、livedoor Readerに登録しているフィードの見直しをした。そんなことをしていたら、久々にブログを書きたくなった。

登録してたのは140フィードくらい。未読は6000を超えていた。全部見ることは到底叶わず、現時点で未読3000くらいまで減らしたんだけど、フィード購読してもロクに見ることすらしなかったものがたくさんあったことに気付いた。

今年は夜間に学校に通ったりして情報収集の時間がより減ったことは事実だけど、特に積極的に情報収集しなくてもどうにかやっていけるもんだ、と思ったり。

その理由として、iPhoneのプッシュ機能で、FacebookやTwitterなどの更新がプッシュ通知されるようになったことで、情報が向こうから自ずとやってくる環境になったこと。逆に言えば、情報がどんどん押し付けられてくる時代になっちゃったと言えるのかもしれない。でもそれって本当に必要な情報なの?

ソーシャルって名の付くものに警鐘を鳴らしている人はたくさんいるけど、僕もどちらかというと、一も二もなくソーシャルサービスマンセーっていう風潮には違和感を感じている方。人との繋がりは確かに大事。でも何かを犠牲にしてまでそれは取り組むべきことなんだろうか。特にモノヅクリを生業とする人にとっては、作ってる時間が何より大切な時間のはず。作ってる時間っていうのは、言って見れば孤独な時間ですよ。誰にも邪魔されず、作業に集中できる時間、これがなければモノヅクリなんてできない。

Facebookについて言えば、いまやなくてはならないインフラに成長したと思うよ。僕もこれがなくなると困ると思う。現にこの記事もFacebookに自動投稿していることだし(笑)
でも昔の知人や、十数年会ったこともない小・中学校時代の同級生の近況が知りたいかっていうと、正直興味がない。むしろ知りたくない。だからそういう人から友達申請があっても、承諾しないことがある。どうだろう、こんな考えを持っている人間は少数なんだろうか。

ああ、情報収集の話だったけど話がそれた。

Web業界の話で言えば、HTML5だなんだとどんどん新しい技術が使えるようになって、さも移り変わりが激しい業界と思われていることと思うけど、ここ2年くらいのフィード見てみると、意外と大して話題は変わっていないことに気付く。HTML5、jQuery、JavaScript、CSS3、Sass、MT、WordPress、git…というようなキーワード。技術について言えば、必要な知識はそんなに短期間に変わるものではない。ニュースを追うより、どれだけきちんと身につけられるかの方が大事。

こんな偉そうなこと書いておいて、数年後に食いっぱぐれてたりしてね。油断は禁物。