Мы разрабатываем гибридное приложение для iOS. Большая часть приложения представляет собой WebApp, работающее в UIWebView. Иногда для собственной части приложения необходимо изменить URL-адрес, добавив некоторые параметры. Я знаю, что есть «альтернативные» решения, которые мы могли бы использовать (например, нативное приложение обращается к нашему серверу независимо от веб-просмотра); Тем не менее, меня интересует, прежде всего, хорошее и безопасное решение для увеличения URL.
Я искал «лучшую» технику для этого и нашел две, которые, кажется, (в основном) работают.
Техника № 1 - повторная инициализация URL
- (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 - отклонить 1-й 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, кажется, вызывает артефакты на некоторых страницах («загрузка iFrame прервана», возможно, другие проблемы).
Мне любопытно, сделал ли кто-нибудь еще замену URL, например, или с помощью другой техники, или если кто-то знает о проблемах с техникой № 1 (которую я, надеюсь, буду использовать).
Я знаю, что метод swizzling не рекомендуется, и документ Apple рекомендует не создавать подклассы UIWebView.
Спасибо!
UPDATE
Упс - техника № 1 на самом деле не работает. Мой настоящий код делал больше, чем я опубликовал, и он только работал ... Это, наверное, хорошие новости, так как я хотел немного больше зла.