Если я правильно понимаю вашу проблему, т. Е. Как заставить UIWebView
отправлять сообщения друг другу, я бы сделал это, создав промежуточный контроллер.
Ваш контроллер будет действовать как UIWebViewDelegate
для обоих UIWebView
с, и его обязанности будут:
создание второго UIWebView
(размещение всплывающего окна) путем перехвата -webView:shouldStartLoadWithRequest:navigationType:
(что, я думаю, вы уже делаете);
перехватить щелчок по всплывающему окну и затем использовать – stringByEvaluatingJavaScriptFromString:
для получения любой необходимой информации;
передать эту информацию первому UIWebView
с помощью – stringByEvaluatingJavaScriptFromString:
.
У меня нет информации о том, какие данные передаются со второй страницы на первую, поэтому я не могу быть более подробным.
В любом случае, я думаю, что использование второго UIWebView
для всплывающего окна просто нарушит отношения родитель / потомок DOM (потому что у вас их два), поэтому вам придется прибегнуть к некоторой дополнительной ручной обработке или изменить дизайн вашего веб-приложения.
EDIT:
Прочитав ваш комментарий:
UIWebView действительно жадный к касаниям. Если перехвата кликов по ссылкам через -webView:shouldStartLoadWithRequest:navigationType:
недостаточно, вы можете прибегнуть к переопределению -(void)sendEvent:(UIEvent*)event
в своем собственном UIWindow
производном классе; но это необходимо, только если вы смешиваете UIWebView и, например, UIScrollView или когда вы хотите обрабатывать мультитач; смотрите здесь для получения дополнительной информации;
вот пример того, как вы можете выполнить javascript:
NSString *jsCall = [NSString stringWithFormat:@"yourFunction(%@);", arg];
[webView stringByEvaluatingJavaScriptFromString:jsCall];
Вы можете использовать это несколькими различными способами:
`jsCall1 = @"var func = function(id) { var obj = document.getElementById(id); return id.value; }; func('dataObject');";
`jsDataString = [popUp stringByEvaluatingJavaScriptFromString:jsCall1];
`jsCall2 = NSString stringWithFormat:@"storeDataFromPopup(%@);", jsDataString];`
`[parentUIWebView stringByEvaluatingJavaScriptFromString:jsCall1];`
РЕДАКТИРОВАТЬ 2:
Тестовое предложение: добавьте следующий код в ваш класс делегата:
- (void)webViewDidFinishLoad:(UIWebView*)webView {
....
NSString* aaa = [_label stringByEvaluatingJavaScriptFromString:@"f();"];
NSLog(@"AAA: %@", aaa);
}
HTML содержит следующий фрагмент:
<script type='text/javascript'>function f() { alert('called!');} alert('javascript OK!');</script>"
это даст вам первое предупреждение, означающее, что с js-анализом все в порядке, и второе, означающее, что функция f была вызвана из webViewDidFinish. Я сделал простой текст, получив веб-страницу и добавив к ней фрагмент javascript, и это сработало.