우리는 iOS 용 하이브리드 응용 프로그램을 개발 중입니다. 대부분의 응용 프로그램은 UIWebView 내에서 실행되는 웹 응용 프로그램입니다. 응용 프로그램의 기본 부분에서 URL을 수정하고 일부 매개 변수를 추가해야하는 경우가 있습니다. '대체'솔루션을 사용할 수 있음을 알고 있습니다 (예 : 웹 뷰와 별개로 자체 서버에서 기본 앱 대화). 그러나 나는 주로 URL 확대에 대한 좋은 해결책 인 &에 관심이 있습니다.UIWebView에서 사용되는 URL을 보강하는 가장 안전한 방법은 무엇입니까?
나는 이것을 수행하는 "최상의"기술을 찾고 있었고 (주로) 작동하는 것으로 보이는 두 가지를 발견했다.
기술 # 1 - 재 초기화
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSLog(@"GOTO: %@", [[request URL] absoluteString]);
NSURL * oldurl = request.URL;
[[request URL] initWithString:[NSString stringWithFormat:@"%@&newParam=dave", [oldurl absoluteString]]];
return YES;
}
이 기술 # 2가 URL - 새
- (BOOL)webView:(UIWebView *)theWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL * oldurl = request.URL;
if ([self isFixed:oldurl]) {
return YES;
} else {
NSURL * newurl = [NSURL URLWithString:[NSString stringWithFormat:@"%@&newParam=dave", [oldurl absoluteString]]];
[theWebView loadRequest:[NSURLRequest requestWithURL:newurl]];
return NO;
}
}
기술 # 2에서 하위 1 URL을 거부 등을 일부 페이지 ("iFrame로드가 중단되었습니다", 다른 문제 일 수도 있음)에서 아티팩트가 발생하는 것으로 보입니다.
다른 사람이 이와 같이 URL 바꾸기를했거나 다른 기술을 사용했거나 다른 사람이 기술 # 1의 문제점을 알고 있다면 궁금합니다 (잘하면 사용하고 있습니다).
나는 방법을 알고있다. swizzling은 권장되지 않으며 Apple의 문서에서는 UIWebView를 서브 클래 싱하지 않기를 권장한다.
감사합니다.
업데이트 우습고 - 기술 # 1은 실제로 작동하지 않습니다. 내 실제 코드는 내가 게시 한 것보다 더 많은 일을하고 있었고, 단지 작동하는 것처럼 보였습니다 ... 이것은 내가 좋아할만한 조금 더 나쁜 것이기 때문에 아마 좋은 소식 일 것입니다.
URL에 매개 변수를 추가하려는 경우이 코드는 좀 더 견고합니다. http://stackoverflow.com/questions/7026916/passing-arguments-into-url-string-objective-c/7027608#7027608 – Jano
아, 그 트릭을 시험해 보겠습니다. 그 게시물에 받아 들여진 해결책이 없다고 조금 걱정했다. – Dave
@Jano, 제안에 감사드립니다. 그러나 다른 대답은 단순히 새로운 URL을 만드는 것입니다.UIWebView에서 사용할 URL을 업데이트하면됩니다. – Dave