ページ

2009年8月7日金曜日

WPSU(11) - UserAgent を変える(Safariを名乗る?)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

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).


これはなんだ?