рдЬрдм рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рдВрд╕рд╛рдзрдирд╢реАрд▓рддрд╛ рдФрд░ рд╕рд░рд▓рддрд╛ рджрд┐рдЦрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдХреНрд╕рд░, рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЙрдбрд╝рд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ, рдРрд╕реЗ рд╕рд┐рд╕реНрдЯрдо рдХреА рддрдХрдиреАрдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдПред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ Money.Ru Money рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдПрдВрдЧреЗред


рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╛рдЭреЗрджрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдмрд╛рд╣рд░реА рд╡реЗрдм рдкреЗрдЬ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡реЗрдм рдлрд╝реЙрд░реНрдо рд╣реИред рдкреЗрдЬ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рд╕реНрд╡рд░реВрдк рд╣рдорд╛рд░реЗ рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рднрд╛рдЧ рдХреА рд╕реБрдВрджрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдВрджрд░ рдЕрдХрд╛рд░реНрдмрдирд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИред рдбрд┐рдЬрд╛рдЗрдирд░ рдПрдХ рдирдИ рд╕реБрдВрджрд░ рдЖрдХреГрддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдХрдорд╛рдВрдб рджреЗрддреЗ рд╣реИрдВ: "рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП!"ред рд╣рд░ рдХрд┐рд╕реА рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд▓рдХреНрд╖реНрдп рдПрдХ рдЧреБрдгрд╡рддреНрддрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред
рд╣рдорд╛рд░рд╛ рдХрд╛рд░реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рд╣реЛ рд░рд╣реА рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирдП рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдлрд╝реЙрд░реНрдо рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░реЗрдВ - рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗрдм рдлреЙрд░реНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
рдСрдлрд╣реИрдВрдб, рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкреЗрдЬ рдХреЗ рддрд░реНрдХ рдХреЛ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ "рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░
UIWebView рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рдХреА рд╕рднреА рд╕рд╛рджрдЧреА рдХреЗ рд╕рд╛рде, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдПрдХ рдлреЙрд░реНрдо рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ
CSRF рдЯреЛрдХрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдлрд┐рд░ рд╣рдореЗрдВ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЬреЛ рдЕрдХреНрд╕рд░ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб (рд▓реЛрдб рдФрд░ рдкрд╛рд░реНрд╕) рдкрд░ рднреА рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рд░рд╛рдЬреНрдп рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреА рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдЫрд┐рдкреЗ рд╣реБрдП рдлрд╝реЙрд░реНрдо рдлрд╝реАрд▓реНрдб (рд╣реИрд▓реЛ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ!)ред рдпрд╣ рд╕рдм рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ?
рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ! рдФрд░ рдордВрдЪ рдкрд░, рджрд░реНрд╢рдХреЛрдВ рдХреЗ рдУрд╡реЗрд╢рди рдХреЗ рддрд╣рдд, рдореЗрд╕реНрдЯреНрд░реЛ рдХреНрд░рдЪ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдВрдЦреЛрдВ рд╕реЗ рдЫрд┐рдкреЗ
UIWebView рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рд╡реЗрдм рдкреЗрдЬ рдХреЛ рд╡рд╣рд╛рдВ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдбреЛрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рддрдХрдиреАрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЦрд░рдЧреЛрд╢ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЦреЛрдЬ рдлреЙрд░реНрдо рдХреЛ рд╣реИрдмрд░ рдХреЗ рдореБрдЦреНрдп рдкреГрд╖реНрда рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд HTML рдкреГрд╖реНрда рд╣реИрдВ:
<div class="search"> <form id="search_form" name="search" method="get" action="//habrahabr.ru/search/"> <input type="submit" value=""> <input type="text" name="q" x-webkit-speech="" speech="" tabindex="1" autocomplete="off"> </form> </div>
рдлрд╝реЙрд░реНрдо рд╕рд░рд▓ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рда рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ рдмрдЯрди рд╣реИ; рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрджрд░реНрд╢ рд╡рд╕реНрддреБ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╡реЗрдм рдлреЙрд░реНрдо рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░реЗрдЧрд╛ред
@interface MRWebViewController () <UIWebViewDelegate> @property (nonatomic, weak, readonly) UIWebView *webView; @property (nonatomic, strong, readonly) NSURLRequest *request; @property (nonatomic, assign) BOOL hasForm; // ... @end @implementation MRWebViewController { } // ... - (instancetype)initWithURLString:(NSString *)urlString { self = [super init]; if (self) { _request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]; } return self; } - (void)viewDidLoad { [super viewDidLoad]; [self createWebView]; self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.view.alpha = 0.0; } - (void)createWebView { UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds]; webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; webView.backgroundColor = UIColor.whiteColor; webView.scalesPageToFit = YES; webView.delegate = self; [self.view addSubview:webView]; _webView = webView; } // ... - (void)reload { self.hasForm = NO; self.view.alpha = 0.0; [self.webView stopLoading]; [self.webView loadRequest:self.request]; } // ... @end
рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдПрдХ
UIWebView рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреГрд╖реНрда рдХреЛ рдлрд╝реЙрд░реНрдо рдФрд░ рдПрдХ
NSURLRequest рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд▓реЛрдб рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗред рд╡реНрдпреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП
рдСрдЯреЛрд░реЗрд╕реНрдкреЛрдиреНрдЧрдорд╛рд╕реНрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣рдореЗрдВ рдЗрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдЪрд╛рдЗрд▓реНрдб рд╡реНрдпреВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╣рдо
рдЕрд▓реНрдлрд╛ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдП, рд╣рдорд╛рд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдмреЙрд▓реНрд╕ рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рдХрдВрдЯреНрд░реЛрд▓рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдПрдХ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рд▓реЛрдб рдХрд░реЗрдВред
static NSString *kMRHabraURLString = @"http://habrahabr.ru"; MRWebViewController *controller = [[MRWebViewController alloc] initWithURLString:kMRHabraURLString]; [controller reload];
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╕рдорд╛рд░реЛрд╣ рджреНрд╡рд╛рд░рд╛ рд░реЛрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдбреЛрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдореИрдирд┐рдкреНрдпреБрд▓реЗрдЯ рдХрд░рдирд╛ jQuery рдХреЗ рд╕рд╛рде рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рд▓реЛрдб рдкреЗрдЬ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореМрдЬреВрдж рд╣реЛрдЧрд╛ред
- (void)webViewDidFinishLoad:(UIWebView *)webView { if (!self.hasForm) { NSLog(@"Installing jQuery at %@", webView.request.URL.absoluteString); [self.webView stringByEvaluatingJavaScriptFromString:[MRScriptsFactory jqueryScript]]; self.hasForm = YES; } // ... }
рд╡реЗрдм рдкреЗрдЬ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрддреА рд╣реИ, рдФрд░ рдпрджреНрдпрдкрд┐ рдкреЗрдЬ рдЕрднреА рднреА рдЕрдВрдд рддрдХ рд▓реЛрдб рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХреБрдЫ рднреА рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рдореВрд▓ рд░реВрдк рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдореВрд▓ рдкреНрд░рдкрддреНрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рджрд░реНрдЬ рдХрд░рдиреЗ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд▓реЗрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдореВрд▓ рдлрд╝реЙрд░реНрдо рднрд░рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ "рдЦреЛрдЬ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рд╕рдВрджреЗрд╢
рдЦреЛрдЬ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
ред - (BOOL)searchWithString:(NSString *)searchString { BOOL result = NO; if (self.hasForm) { // ... NSString *actualString = [searchString stringByReplacingOccurrencesOfString:@"'" withString:@"\\'"]; NSString *script = [NSString stringWithFormat:[MRScriptsFactory fillFormScript], actualString]; NSString *scriptResult = [self.webView stringByEvaluatingJavaScriptFromString:script]; __autoreleasing NSError *error = nil; id object = [NSJSONSerialization JSONObjectWithData:[scriptResult dataUsingEncoding:NSUTF8StringEncoding] options:0 error:&error]; result = (!error && [object isKindOfClass:[NSDictionary class]] && [object[@"success"] boolValue]); // ... } return result; }
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
[MRScriptsFactory fillFormScript] рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд░реВрдк рд╣реИ:
(function ($, searchString) { var components = { $text : $("form#search_form input[type='text']"), $submit : $("form#search_form input[type='submit']") }; components.$text.val(searchString); components.$submit.click(); return JSON.stringify({ "success" : true }); })(jQuery, '%@');
рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдлрд╝реЙрд░реНрдо рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рдПрдХ рдЦреЛрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рднрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдлреЙрд░реНрдо рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рд╢реБрд░реВ рдореЗрдВ UIWebView рдореЗрдВ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЗ рдХрд┐рд╕реА рднреА рдмрд╛рдж рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдкрд░рд┐рдХрд▓реНрдкрдирд╛ рдирд╣реАрдВ рдХреА рдереА, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВред
- (void)webViewDidFinishLoad:(UIWebView *)webView { if (!self.hasForm) { // ... } else if (self.isScriptExecuting) { [UIView animateWithDuration:0.3 animations:^{ self.view.alpha = 1.0; }]; self.scriptExecuting = NO; // ... } }
рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдиреЗ рдЦреБрдж рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕рд╛рдмрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд
рд╣реИредрдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╢реНрди рд╣реИрдВ, рдпрд╛ рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЕрдкрдиреА рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВред