WebKitで作った簡易ブラウザで Gmail へアクセスすると「Gmail には完全にサポートされたブラウザのご利用をおすすめします。」と表示され、ユーザインターフェイスが Safariで見るそれとは違った少ししょぼい?ものなる。
UserAgentで判断しているのだろうとあたりをつけて、まずは Safariと簡易ブラウザの UserAgentを調べてみた。
Safari 3.2.3
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; ja-jp)
AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3"
WebKit簡易ブラウザ
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; ja-jp)
AppleWebKit/525.28.3 (KHTML, like Gecko)"
前半は同じだが Safari の場合は最後にバージョン番号とアプリ名/ビルド番号が追加されている。
WebKit のドキュメントには Spoofing という項目が設けられていて UserAgent についての話題が取り上げられている。ここで紹介されていたメソッドを使い試してみよう。
WebKit Objective-C Programming Guide - Spoofing
まずは - [WebView setCustomUserAgent:] から。
試しに適当な文字列を設定してみる。
[_web_view setCustomUserAgent:@"CustomUserAgent"];
するとサーバ側では UserAgentに指定文字列がそのまま出てきた。
"CustomUserAgent"
次に - [WebView setApplicationNameForUserAgent:] を試す。
[_web_view setApplicationNameForUserAgent:@"Sample"];
すると WebKit標準のUserAgentの最後に指定文字列をものが出てきた。
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; ja-jp)
AppleWebKit/525.28.3 (KHTML, like Gecko) Sample"
それでは setApplicationNameForUserAgent: を使い Safariを偽装してみよう。
コード:
[_web_view setApplicationNameForUserAgent:@"Version/3.2.3 Safari/525.28.3"];
サーバ側確認:
"Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10_5_7; ja-jp)
AppleWebKit/525.28.3 (KHTML, like Gecko) Version/3.2.3 Safari/525.28.3"
Gmail へアクセスしてみる。
Safariと同じ画面が出た。Gmailでは「標準HTML画面」と呼ばれているもののようだ。
画面読み込み中に右下に下記のメッセージが表示される。
試しに Safariで「簡易HTML形式」を選んだところ、簡易ブラウザで見たのと同じ画面が表示された。
Gmailでは、UserAgentからブラウザ情報を得てそれを元に HTML5/CSS 3 の対応状況を判断し、画面の表示を変えているようだ。
なお簡易ブラウザでは Gmailの表示が完了した数秒後にクラッシュしてしまった。以下、ログ
Debugger() was called!
The Debugger has exited due to signal 2 (SIGINT).The Debugger has exited due to signal 2 (SIGINT).
これはなんだ?