24/7 twenty-four seven

iOS/OS X application programing topics.

UIWebViewのUser-Agentを変更する。

Yahoo! JAPANをはじめ、Safariで見るとiPhone用のページが表示されるのに、UIWebViewに表示する場合はPC用のページが表示されてしまうサイトがあります。


このようなサイトは、たいていブラウザのUser-Agentによって、表示するページを切り替えています。
UIWebViewではUser-Agentを設定できないので、PC用のページが表示されてしまいます。


Undocumentedな方法になりますが、以下のようにすると、UIWebViewにUser-Agentを設定することができます。

#import <objc/runtime.h>

@interface MyWebViewController : UIViewController {
    IBOutlet UIWebView *myWebView;
}

- (void)viewDidLoad {
    NSString *userAgent = 
        @"Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20";

    id webDocumentView;
    id webView;
    webDocumentView = objc_msgSend(myWebView, @selector(_documentView));
    object_getInstanceVariable(webDocumentView, "_webView", (void**)&webView);
    objc_msgSend(webView, @selector(setCustomUserAgent:), userAgent);
}

解説すると、まずUIWebViewの_documentViewメソッドを呼び出して、UIWebDocumentViewを取得します。
次にUIWebDocumentViewのインスタンス変数である_webViewを取り出します。
_webViewはWebViewクラスのインスタンスで、setCustomUserAgent:というメソッドを持っているので、それを使うと任意のUser-Agentでリクエストを送信できます。


あくまでもUndocumentedな方法なので、これで審査が通るかどうかは分かりません。