일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Example
- 아이폰7
- 포켓볼
- afterdelay
- 해몽
- error
- 보라카이
- 얻는법
- 페이백
- Bitcode
- UITableView
- LG유플러스
- 공략
- GCD
- push
- 샘플
- simulator
- setting
- swift
- 앱스토어
- 포켓몬 GO
- Check
- UIView
- Xcode
- swift3
- loop
- IOS
- 신도림 테크노마트
- 스마트폰
- 신도림
- Today
- Total
도래울
[iOS] User-Agent 기본 값 바꾸기 본문
개발하면서, UIWebView를 통해 방문하는 사이트에 대해 User-Agent 값을 다른 것으로 바꿔서 보내고 싶은 경우가 있었다.
- 방문하는 사이트를 모바일 버전으로만 보고 싶을 때.
- 아이패드지만 모바일 버전으로 방문하고 싶을 때.
- 아이폰이지만 PC 버전으로 방문하고 싶을 때.
처음에는 UIWebView의 'loadRequest:'로 페이지를 요청할 때 User-Agent 값을 수정한 NSMutableURLRequest를 사용하면 될 것이라 생각하고 사용해 보았으나 'loadRequest:'에 별도로 User-Agent를 다시 기본값으로 돌려주는지 원하는 데로 동작하지 못했다.
다른 방도가 없나 싶어 구글링을 해보니 프로그램이 시작되는 시점에서 User-Agent의 기본값이 설정되고 이후에는 수정할 수 없다고 한다. 그래서 추가 구글링 통해 아래와 같이 AppDelegate(NSObject)의 initialize를 구현하였다.
// AppDelegate.m
+ (void)initialize
{
NSDictionary *dic = @{@"UserAgent" : [NSString stringWithFormat:@"UserAgent 값"]};
[[NSUserDefaults standardUserDefaults] registerDefaults:dic];
}
주로 사용한 User-Agent는 아래와 같고 $ 부분만 'iPad' 또는 'iPhone'으로 매핑하여 원하는 데로 모바일/PC 모드로 접근할 수 있었다.
Mozilla/5.0 ($; CPU OS 5_1 like Mac OS X) AppleWebKit/534.46 (XHTML, like Gecko) Version/5.1 Mobile/9B176
접기
User-Agent 값은 Safari의 상단 메뉴에서 '개발자용 > 사용자 에이전트'에 들어가면 찾을 수 있다. (타 브라우저도 비슷한 식이다)
접기
User-Agent 값 얻기 2
이대로 끝내자니 뭔가 아쉽지 않은가? User-Agent를 NSUserDefaults의 'registerDefaults:'으로 수정하였는데 다른 값도 수정할 수 있을 것 같지 않나?
그래서 한 번 기본값들이 뭐 뭐 있는지 로그를 찍어봤다.
// AppDelegate.m
+ (void)initialize
{
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
}
결과는 아래와 같았다. (XCode5, iPhone 7.0.3 기준)
결과보기
키보드 설정이나 운영체제 지원언어 목록, 앱 기본 언어 등 값들이 보인다.
UIWebView를 사용 중인 경우에는 WebKit 설정 값을 찾아볼 수 있었다. (XCode5, iPhone 7.0.3 기준)
결과보기
호오! 점점 흥미로워진다. 그러면, User-Agent 값을 수정하듯이 수정할 수 있을까?
만만해 보이는 'WebKitJavaScriptEnabled' 값을 NO로 바꿔보자.
// AppDelegate.m
+ (void)initialize
{
NSDictionary *dic = @{@"WebKitJavaScriptEnabled" : @NO};
[[NSUserDefaults standardUserDefaults] registerDefaults:dic];
}
실행해보니 자바스크립트가 정상적으로 동작한다(?).
의문이 들어 값이 잘 바뀌는지 확인하기 위해 UIWebViewDelegate에서 값을 확인했고 확인 결과 요청되는 페이지마다 WebKit 관련 설정들이 변하는 것을 확인할 수 있었다.
그래서 요청이 시작되기 전에 WebKitJavaScriptEnabled 값을 NO로 바꿔 보기로 했다.
// ViewController.m
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSDictionary *dic = @{@"WebKitJavaScriptEnabled" : @NO};
[[NSUserDefaults standardUserDefaults] registerDefaults:dic];
return YES;
}
이렇게 하니 네이버(www.naver.com)를 로드했을때 페이지 내 자바스크립트가 실행되지 못하는 것을 확인할 수 있었다.
그 외 다른 값들도 시도해본 결과 로드되는 페이지에 상관없이 처음에 초기화된 값을 유지하는 것도 있었고 페이지 로드할 때마다 새롭게 갱신되는 것도 있었다. 나중에 재미진 일을 해볼 수 있겠다 :)
'개발 > iOS' 카테고리의 다른 글
맥(xcode)에서 SVN, GIT 연결 끊기 (0) | 2017.06.15 |
---|---|
hide suggestion list above keyboard (0) | 2017.02.17 |
Swift performSelector: withObject: afterDelay (0) | 2017.02.07 |
iOS BitCode 란? (0) | 2017.02.01 |
iOS ATS(App Transport Security) 란? (0) | 2017.02.01 |